/*
 * Copyright (c) 2011, Yahoo! Inc.  All rights reserved.
 * Copyright (c) 2011-2012, Log-Normal, Inc.  All rights reserved.
 * Copyright (c) 2012-2017, SOASTA, Inc. All rights reserved.
 * Copyright (c) 2017, Akamai Technologies, Inc. All rights reserved.
 * Copyrights licensed under the BSD License. See the accompanying LICENSE.txt file for terms.
 */
/* Boomerang Version: 1.720.0 b17966bb92f8ac2ddcda4ac1d9c0aaea6d2eda7b */
const jsdom = require("jsdom");
const { JSDOM } = jsdom;
const dom = new JSDOM(`<!DOCTYPE html><p>Hello world</p>`);
window=dom.window;
document=window.document;
navigator=window.navigator;



BOOMR_start = (new Date).getTime();
function BOOMR_check_doc_domain(e) {
    if (window) {
        if (!e) {
            if (window.parent === window || !document.getElementById("boomr-if-as"))
                return;
            if (window.BOOMR && BOOMR.boomerang_frame && BOOMR.window)
                try {
                    BOOMR.boomerang_frame.document.domain !== BOOMR.window.document.domain && (BOOMR.boomerang_frame.document.domain = BOOMR.window.document.domain)
                } catch (t) {
                    BOOMR.isCrossOriginError(t) || BOOMR.addError(t, "BOOMR_check_doc_domain.domainFix")
                }
            e = document.domain
        }
        if (e && -1 !== e.indexOf(".") && window.parent) {
            try {
                window.parent.document;
                return
            } catch (t) {
                try {
                    document.domain = e
                } catch (n) {
                    return
                }
            }
            try {
                window.parent.document;
                return
            } catch (t) {
                e = e.replace(/^[\w\-]+\./, "")
            }
            BOOMR_check_doc_domain(e)
        }
    }
}
BOOMR_check_doc_domain();
!function(c) {
    var d, t, l, o, s, e, a, n = c;
    c.parent !== c && document.getElementById("boomr-if-as") && "script" === document.getElementById("boomr-if-as").nodeName.toLowerCase() && (c = c.parent);
    l = c.document;
    c.BOOMR || (c.BOOMR = {});
    BOOMR = c.BOOMR;
    if (!BOOMR.version) {
        BOOMR.version = "1.720.0";
        BOOMR.window = c;
        BOOMR.boomerang_frame = n;
        BOOMR.plugins || (BOOMR.plugins = {});
        !function() {
            try {
                new c.CustomEvent("CustomEvent") !== undefined && (o = function(e, t) {
                    return new c.CustomEvent(e,t)
                }
                )
            } catch (e) {}
            try {
                !o && l.createEvent && l.createEvent("CustomEvent") && (o = function(e, t) {
                    var n = l.createEvent("CustomEvent");
                    t = t || {
                        cancelable: !1,
                        bubbles: !1
                    };
                    n.initCustomEvent(e, t.bubbles, t.cancelable, t.detail);
                    return n
                }
                )
            } catch (e) {}
            !o && l.createEventObject && (o = function(e, t) {
                var n = l.createEventObject();
                n.type = n.propertyName = e;
                n.detail = t.detail;
                return n
            }
            );
            o = o || function() {
                return undefined
            }
        }();
        s = function(e, t, n) {
            var r = o(e, {
                detail: t
            });
            r && (n ? BOOMR.setImmediate(i) : i());
            function i() {
                try {
                    l.dispatchEvent ? l.dispatchEvent(r) : l.fireEvent && l.fireEvent("onpropertychange", r)
                } catch (e) {}
            }
        }
        ;
        if ("undefined" != typeof l.hidden) {
            e = "visibilityState";
            a = "visibilitychange"
        } else if ("undefined" != typeof l.mozHidden) {
            e = "mozVisibilityState";
            a = "mozvisibilitychange"
        } else if ("undefined" != typeof l.msHidden) {
            e = "msVisibilityState";
            a = "msvisibilitychange"
        } else if ("undefined" != typeof l.webkitHidden) {
            e = "webkitVisibilityState";
            a = "webkitvisibilitychange"
        }
        d = {
            beacon_url: "",
            beacon_url_force_https: !0,
            beacon_urls_allowed: ["^//[a-z0-9]+\\.akstat\\.io/?$"],
            beacon_type: "AUTO",
            beacon_auth_key: "Authorization",
            beacon_auth_token: undefined,
            beacon_with_credentials: !1,
            beacon_disable_sendbeacon: !1,
            site_domain: c.location.hostname.replace(/.*?([^.]+\.[^.]+)\.?$/, "$1").toLowerCase(),
            user_ip: "",
            autorun: !0,
            hasSentPageLoadBeacon: !1,
            r: undefined,
            same_site_cookie: "Lax",
            secure_cookie: !1,
            forced_same_site_cookie_none: !1,
            events: {
                page_ready: [],
                page_unload: [],
                before_unload: [],
                dom_loaded: [],
                visibility_changed: [],
                prerender_to_visible: [],
                before_beacon: [],
                beacon: [],
                page_load_beacon: [],
                xhr_load: [],
                click: [],
                form_submit: [],
                config: [],
                xhr_init: [],
                spa_init: [],
                spa_navigation: [],
                spa_cancel: [],
                xhr_send: [],
                xhr_error: [],
                error: [],
                netinfo: [],
                rage_click: [],
                before_early_beacon: []
            },
            public_events: {
                before_beacon: "onBeforeBoomerangBeacon",
                beacon: "onBoomerangBeacon",
                onboomerangloaded: "onBoomerangLoaded"
            },
            translate_events: {
                onbeacon: "beacon",
                onconfig: "config",
                onerror: "error",
                onxhrerror: "xhr_error"
            },
            unloadEventsCount: 0,
            unloadEventCalled: 0,
            listenerCallbacks: {},
            vars: {},
            singleBeaconVars: {},
            varPriority: {
                "-1": {},
                1: {}
            },
            errors: {},
            disabled_plugins: {},
            localStorageSupported: !1,
            LOCAL_STORAGE_PREFIX: "_boomr_",
            nativeOverwrites: [],
            xb_handler: function(n) {
                return function(e) {
                    var t;
                    (e = e || c.event).target ? t = e.target : e.srcElement && (t = e.srcElement);
                    3 === t.nodeType && (t = t.parentNode);
                    t && t.nodeName && "OBJECT" === t.nodeName.toUpperCase() && "application/x-shockwave-flash" === t.type || d.fireEvent(n, t)
                }
            },
            clearEvents: function() {
                var e;
                for (e in this.events)
                    this.events.hasOwnProperty(e) && (this.events[e] = [])
            },
            clearListeners: function() {
                var e;
                for (e in d.listenerCallbacks)
                    if (d.listenerCallbacks.hasOwnProperty(e))
                        for (; d.listenerCallbacks[e].length; )
                            BOOMR.utils.removeListener(d.listenerCallbacks[e][0].el, e, d.listenerCallbacks[e][0].fn);
                d.listenerCallbacks = {}
            },
            fireEvent: function(e, t) {
                var n, r, i, o;
                e = e.toLowerCase();
                this.translate_events[e] && (e = this.translate_events[e]);
                if (this.events.hasOwnProperty(e)) {
                    this.public_events.hasOwnProperty(e) && s(this.public_events[e], t);
                    i = this.events[e];
                    "before_beacon" !== e && "beacon" !== e && "before_early_beacon" !== e && BOOMR.real_sendBeacon();
                    o = i.length;
                    for (n = 0; n < o; n++)
                        try {
                            (r = i[n]).fn.call(r.scope, t, r.cb_data)
                        } catch (a) {
                            BOOMR.addError(a, "fireEvent." + e + "<" + n + ">")
                        }
                    for (n = 0; n < o; n++)
                        if (i[n].once) {
                            i.splice(n, 1);
                            o--;
                            n--
                        }
                }
            },
            spaNavigation: function() {
                d.onloadfired = !0
            },
            beaconUrlAllowed: function(e) {
                if (!d.beacon_urls_allowed || 0 === d.beacon_urls_allowed.length)
                    return !0;
                for (var t = 0; t < d.beacon_urls_allowed.length; t++) {
                    if (new RegExp(d.beacon_urls_allowed[t]).exec(e))
                        return !0
                }
                return !1
            },
            checkLocalStorageSupport: function() {
                var e = d.LOCAL_STORAGE_PREFIX + "clss";
                d.localStorageSupported = !1;
                try {
                    if (!c.JSON || !c.localStorage)
                        return;
                    c.localStorage.setItem(e, e);
                    d.localStorageSupported = c.localStorage.getItem(e) === e;
                    c.localStorage.removeItem(e)
                } catch (t) {
                    d.localStorageSupported = !1
                }
            },
            onFrameUnloaded: function() {
                var e, t;
                BOOMR.isUnloaded = !0;
                for (e = 0; e < d.nativeOverwrites.length; e++)
                    (t = d.nativeOverwrites[e]).obj[t.functionName] = t.origFn;
                d.nativeOverwrites = []
            }
        };
        t = {
            t_start: BOOMR_start,
            t_end: undefined,
            url: "",
            config_url: null,
            loadedLate: !1,
            beaconsSent: 0,
            isUnloaded: !1,
            beaconInQueue: !1,
            cookies: {},
            testedCookies: !1,
            constants: {
                BEACON_TYPE_SPAS: ["spa", "spa_hard"],
                MAX_GET_LENGTH: 2e3
            },
            session: {
                domain: d.site_domain,
                ID: undefined,
                start: undefined,
                length: 0,
                enabled: !0
            },
            utils: {
                hasPostMessageSupport: function() {
                    return !(!c.postMessage || "function" != typeof c.postMessage && "object" != typeof c.postMessage)
                },
                objectToString: function(e, t, n) {
                    var r, i = [];
                    if (!e || "object" != typeof e)
                        return e;
                    t === undefined && (t = "\n\t");
                    n = n || 0;
                    if (BOOMR.utils.isArray(e)) {
                        for (r = 0; r < e.length; r++)
                            0 < n && null !== e[r] && "object" == typeof e[r] ? i.push(this.objectToString(e[r], t + ("\n\t" === t ? "\t" : ""), n - 1)) : "&" === t ? i.push(encodeURIComponent(e[r])) : i.push(e[r]);
                        t = ","
                    } else
                        for (r in e)
                            Object.prototype.hasOwnProperty.call(e, r) && (0 < n && null !== e[r] && "object" == typeof e[r] ? i.push(encodeURIComponent(r) + "=" + this.objectToString(e[r], t + ("\n\t" === t ? "\t" : ""), n - 1)) : "&" === t ? i.push(encodeURIComponent(r) + "=" + encodeURIComponent(e[r])) : i.push(r + "=" + e[r]));
                    return i.join(t)
                },
                getCookie: function(e) {
                    var t;
                    if (!e)
                        return null;
                    if ("undefined" != typeof BOOMR.cookies[e])
                        return !1 === BOOMR.cookies[e] ? undefined : BOOMR.cookies[e];
                    if (void 0 === (t = this.getRawCookie(e))) {
                        BOOMR.cookies[e] = !1;
                        return undefined
                    }
                    BOOMR.cookies[e] = t;
                    return BOOMR.cookies[e]
                },
                getRawCookie: function(e) {
                    if (!e)
                        return null;
                    e = " " + e + "=";
                    var t, n = " " + l.cookie + ";";
                    if (0 <= (t = n.indexOf(e))) {
                        t += e.length;
                        return n.substring(t, n.indexOf(";", t)).replace(/^"/, "").replace(/"$/, "")
                    }
                },
                setCookie: function(e, t, n) {
                    console.log(e, t, n,  BOOMR.cookies[e], this.objectToString(t, "&"))
                    var r, i, o, a, s;
                    if (!e || !BOOMR.session.domain || void 0 === t) {
                        BOOMR.addVar("nocookie", 1);
                        return !1
                    }
                    if ((r = this.objectToString(t, "&")) === BOOMR.cookies[e])
                        return !0;
                    if ((i = e + '="' + r + '"').length < 500) {
                        a = [i, "path=/", "domain=" + BOOMR.session.domain];
                        if ("number" == typeof n) {
                            (s = new Date).setTime(s.getTime() + 1e3 * n);
                            s = s.toGMTString();
                            a.push("expires=" + s)
                        }
                        var u = this.getSameSiteAttributeParts();
                        "https:" === location.protocol && !0 === d.secure_cookie && -1 === u.indexOf("Secure") && u.push("Secure");
                        a = a.concat(u);
                        l.cookie = a.join("; ");
                        if (BOOMR.testedCookies) {
                            BOOMR.cookies[e] = "number" != typeof n || 0 < n ? r : undefined;
                            console.log("BOOMR.cookies", BOOMR.cookies)
                            return !0
                        }
                        BOOMR.cookies[e] = undefined;
                        if (r === (o = this.getRawCookie(e)) || void 0 === o && "number" == typeof n && n <= 0) {
                            BOOMR.cookies[e] = r;
                            BOOMR.testedCookies = !0;
                            BOOMR.removeVar("nocookie");
                            return !0
                        }
                        BOOMR.warn("Saved cookie value doesn't match what we tried to set:\n" + r + "\n" + o)
                    } else
                        BOOMR.warn("Cookie too long: " + i.length + " " + i);
                    BOOMR.addVar("nocookie", 1);
                    return !1
                },
                getSubCookies: function(e) {
                    var t, n, r, i, o = !1, a = {};
                    if (!e)
                        return null;
                    if ("string" != typeof e)
                        return null;
                    for (n = 0,
                    r = (t = e.split("&")).length; n < r; n++)
                        if ((i = t[n].split("="))[0]) {
                            i.push("");
                            a[decodeURIComponent(i[0])] = decodeURIComponent(i[1]);
                            o = !0
                        }
                    return o ? a : null
                },
                removeCookie: function(e) {
                    return this.setCookie(e, {}, -86400)
                },
                getSameSiteAttributeParts: function() {
                    var e = d.same_site_cookie.toUpperCase();
                    d.forced_same_site_cookie_none && (e = "NONE");
                    return "LAX" === e ? ["SameSite=Lax"] : "NONE" === e ? "https:" === location.protocol && this.isCurrentUASameSiteNoneCompatible() ? ["SameSite=None", "Secure"] : [] : "STRICT" === e ? ["SameSite=Strict"] : ["SameSite=Lax"]
                },
                getLocalStorage: function(e) {
                    var t, n;
                    if (!e || !d.localStorageSupported)
                        return null;
                    try {
                        if (null === (t = c.localStorage.getItem(d.LOCAL_STORAGE_PREFIX + e)))
                            return undefined;
                        n = c.JSON.parse(t)
                    } catch (r) {
                        BOOMR.warn(r);
                        return null
                    }
                    if (!n || "object" != typeof n.items) {
                        this.removeLocalStorage(e);
                        return null
                    }
                    if ("number" == typeof n.expires && BOOMR.now() >= n.expires) {
                        this.removeLocalStorage(e);
                        return undefined
                    }
                    return n.items
                },
                setLocalStorage: function(e, t, n) {
                    var r, i, o;
                    if (!e || !d.localStorageSupported || "object" != typeof t)
                        return !1;
                    r = {
                        items: t
                    };
                    "number" == typeof n && (r.expires = BOOMR.now() + 1e3 * n);
                    if ((i = c.JSON.stringify(r)).length < 5e4) {
                        try {
                            c.localStorage.setItem(d.LOCAL_STORAGE_PREFIX + e, i);
                            if (i === (o = c.localStorage.getItem(d.LOCAL_STORAGE_PREFIX + e)))
                                return !0
                        } catch (a) {}
                        BOOMR.warn("Saved storage value doesn't match what we tried to set:\n" + i + "\n" + o)
                    } else
                        BOOMR.warn("Storage items too large: " + i.length + " " + i);
                    return !1
                },
                removeLocalStorage: function(e) {
                    if (!e || !d.localStorageSupported)
                        return !1;
                    try {
                        c.localStorage.removeItem(d.LOCAL_STORAGE_PREFIX + e);
                        return !0
                    } catch (t) {}
                    return !1
                },
                cleanupURL: function(e, t) {
                    if (!e || BOOMR.utils.isArray(e))
                        return "";
                    d.strip_query_string && (e = e.replace(/\?.*/, "?qs-redacted"));
                    if (void 0 !== t && e && e.length > t) {
                        var n = e.indexOf("?");
                        e = -1 !== n && n < t ? e.substr(0, n) + "?..." : e.substr(0, t - 3) + "..."
                    }
                    return e
                },
                hashQueryString: function(e, t) {
                    if (!e)
                        return e;
                    if (!e.match) {
                        BOOMR.addError("TypeError: Not a string", "hashQueryString", typeof e);
                        return ""
                    }
                    e.match(/^\/\//) && (e = location.protocol + e);
                    if (!e.match(/^(https?|file):/)) {
                        BOOMR.error("Passed in URL is invalid: " + e);
                        return ""
                    }
                    t && (e = e.replace(/#.*/, ""));
                    return e.replace(/\?([^#]*)/, function(e, t) {
                        return "?" + (10 < t.length ? BOOMR.utils.hashString(t) : t)
                    })
                },
                pluginConfig: function(e, t, n, r) {
                    var i, o = 0;
                    if (!t || !t[n])
                        return !1;
                    for (i = 0; i < r.length; i++)
                        if (t[n][r[i]] !== undefined) {
                            e[r[i]] = t[n][r[i]];
                            o++
                        }
                    return 0 < o
                },
                arrayFilter: function(e, t) {
                    var n = [];
                    if (!(this.isArray(e) || e && "number" == typeof e.length) || "function" != typeof t)
                        return n;
                    if ("function" == typeof e.filter)
                        n = e.filter(t);
                    else
                        for (var r, i = -1, o = e.length; ++i < o; )
                            t(r = e[i], i, e) && (n[n.length] = r);
                    return n
                },
                arrayFind: function(e, t) {
                    if (!(this.isArray(e) || e && "number" == typeof e.length) || "function" != typeof t)
                        return undefined;
                    if ("function" == typeof e.find)
                        return e.find(t);
                    for (var n, r = -1, i = e.length; ++r < i; )
                        if (t(n = e[r], r, e))
                            return n;
                    return undefined
                },
                isMutationObserverSupported: function() {
                    return !(c && c.navigator && c.navigator.userAgent && c.navigator.userAgent.match(/Trident.*rv[ :]*11\./)) && c && c.MutationObserver && "function" == typeof c.MutationObserver
                },
                addObserver: function(e, t, n, r, i, o) {
                    var a, s, u = {
                        observer: null,
                        timer: null
                    };
                    if (!this.isMutationObserverSupported() || !r || !e)
                        return null;
                    function l(e) {
                        var t = !1;
                        if (u.timer) {
                            clearTimeout(u.timer);
                            u.timer = null
                        }
                        r && ((t = r.call(o, e, i)) || (r = null));
                        if (!t && u.observer) {
                            u.observer.disconnect();
                            u.observer = null
                        }
                        "number" == typeof t && 0 < t && (u.timer = setTimeout(l, t))
                    }
                    a = c.MutationObserver;
                    c.Zone && "function" == typeof c.Zone.__symbol__ && (s = c.Zone.__symbol__("MutationObserver")) && "string" == typeof s && c.hasOwnProperty(s) && "function" == typeof c[s] && (a = c[s]);
                    u.observer = new a(l);
                    n && (u.timer = setTimeout(l, u.timeout));
                    u.observer.observe(e, t);
                    return u
                },
                addListener: function(e, t, n, r) {
                    var i = !1;
                    if (e.addEventListener) {
                        "object" == typeof r ? i = r : "boolean" == typeof r && r && BOOMR.browser.supportsPassive() && (i = {
                            capture: !1,
                            passive: !0
                        });
                        e.addEventListener(t, n, i)
                    } else
                        e.attachEvent && e.attachEvent("on" + t, n);
                    d.listenerCallbacks[t] = d.listenerCallbacks[t] || [];
                    d.listenerCallbacks[t].push({
                        el: e,
                        fn: n
                    })
                },
                removeListener: function(e, t, n) {
                    e.removeEventListener ? e.removeEventListener(t, n, !1) : e.detachEvent && e.detachEvent("on" + t, n);
                    if (d.listenerCallbacks.hasOwnProperty(t))
                        for (var r = 0; r < d.listenerCallbacks[t].length; r++)
                            if (n === d.listenerCallbacks[t][r].fn && e === d.listenerCallbacks[t][r].el) {
                                d.listenerCallbacks[t].splice(r, 1);
                                return
                            }
                },
                isArray: function(e) {
                    return "[object Array]" === Object.prototype.toString.call(e)
                },
                inArray: function(e, t) {
                    var n;
                    if (void 0 === e || void 0 === t || !t.length)
                        return !1;
                    for (n = 0; n < t.length; n++)
                        if (t[n] === e)
                            return !0;
                    return !1
                },
                getQueryParamValue: function(e, t) {
                    var n, r, i, o;
                    if (!e)
                        return null;
                    "string" == typeof t ? (n = BOOMR.window.document.createElement("a")).href = t : n = "object" == typeof t && "string" == typeof t.search ? t : BOOMR.window.location;
                    r = n.search.slice(1).split(/&/);
                    for (i = 0; i < r.length; i++)
                        if (r[i] && (o = r[i].split("=")).length && o[0] === e)
                            try {
                                return 1 < o.length ? decodeURIComponent(o.splice(1).join("=").replace(/\+/g, " ")) : ""
                            } catch (a) {
                                if (!a || "string" != typeof a.name || -1 === a.name.indexOf("URIError"))
                                    throw a
                            }
                    return null
                },
                generateUUID: function() {
                    return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(e) {
                        var t = 16 * Math.random() | 0;
                        return ("x" === e ? t : 3 & t | 8).toString(16)
                    })
                },
                generateId: function(e) {
                    return "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx".substr(0, e || 40).replace(/x/g, function(e) {
                        return "0" === (e = (Math.random() || .01).toString(36)) ? "0" : e.substr(2, 1)
                    })
                },
                serializeForUrl: function(e) {
                    return BOOMR.utils.Compression && BOOMR.utils.Compression.jsUrl ? BOOMR.utils.Compression.jsUrl(e) : window.JSON ? JSON.stringify(e) : ""
                },
                getMyURL: function() {
                    var e, t = document.currentScript || document.getElementById("boomr-if-as") || document.getElementById("boomr-scr-as");
                    if (t)
                        return t.src;
                    for (var n = document.getElementsByTagName("script"), r = n.length; r--; )
                        if ("interactive" === n[r].readyState)
                            return n[r].src;
                    try {
                        throw new Error
                    } catch (i) {
                        if ("stack"in i && (e = this.arrayFilter(i.stack.split(/\n/), function(e) {
                            return e.match(/https?:\/\//)
                        })) && e.length)
                            return e[0].replace(/.*(https?:\/\/.+?)(:\d+)+\D*$/m, "$1")
                    }
                    return ""
                },
                scroll: function() {
                    var e = c.pageXOffset !== undefined
                      , t = "CSS1Compat" === (c.document.compatMode || "")
                      , n = {
                        x: 0,
                        y: 0
                    };
                    if (e)
                        if ("function" == typeof c.pageXOffset) {
                            n.x = c.pageXOffset();
                            n.y = c.pageYOffset()
                        } else {
                            n.x = c.pageXOffset;
                            n.y = c.pageYOffset
                        }
                    else if (t) {
                        n.x = c.document.documentElement.scrollLeft;
                        n.y = c.document.documentElement.scrollTop
                    } else {
                        n.x = c.document.body.scrollLeft;
                        n.y = c.document.body.scrollTop
                    }
                    "number" == typeof n.sx && (n.sx = Math.round(n.sx));
                    "number" == typeof n.sy && (n.sy = Math.round(n.sy));
                    return n
                },
                windowHeight: function() {
                    return c.innerHeight || c.document.documentElement.clientHeight || c.document.body.clientHeight
                },
                windowWidth: function() {
                    return c.innerWidth || c.document.documentElement.clientWidth || c.document.body.clientWidth
                },
                isNative: function(e) {
                    return !!e && e.toString && !e.hasOwnProperty("toString") && /\[native code\]/.test(String(e))
                },
                overwriteNative: function(e, t, n) {
                    if (e && n) {
                        BOOMR.boomerang_frame !== BOOMR.window && d.nativeOverwrites.push({
                            obj: e,
                            functionName: t,
                            origFn: e[t]
                        });
                        e[t] = n
                    }
                },
                isInteger: function(e) {
                    return (Number.isInteger || function(e) {
                        return "number" == typeof e && isFinite(e) && Math.floor(e) === e
                    }
                    )(e)
                },
                isObjectEmpty: function(e) {
                    for (var t in e)
                        if (e.hasOwnProperty(t))
                            return !1;
                    return !0
                },
                hashString: function(e) {
                    e = encodeURIComponent(e);
                    for (var t = 2166136261, n = 0; n < e.length; n++) {
                        t ^= e.charCodeAt(n);
                        t += (t << 1) + (t << 4) + (t << 7) + (t << 8) + (t << 24)
                    }
                    var r = (t >>> 0).toString() + e.length;
                    return parseInt(r).toString(36)
                },
                isCurrentUASameSiteNoneCompatible: function() {
                    return !(c && c.navigator && c.navigator.userAgent && "string" == typeof c.navigator.userAgent) || this.isUASameSiteNoneCompatible(c.navigator.userAgent)
                },
                isUASameSiteNoneCompatible: function(e) {
                    var t = e.match(/(UCBrowser)\/(\d+\.\d+)\.(\d+)/);
                    if (t) {
                        var n = parseFloat(t[2])
                          , r = t[3];
                        return 12.13 === n ? !(r <= 2) : !(n < 12.13)
                    }
                    if (t = e.match(/(Chrome)\/(\d+)\.(\d+)\.(\d+)\.(\d+)/)) {
                        var i = t[2];
                        return 51 <= i && i <= 66 ? !1 : !0
                    }
                    return (t = e.match(/(Macintosh;.*Mac OS X 10_14[_\d]*.*) AppleWebKit\//)) ? (!(t = e.match(/Version\/.* Safari\//)) || null !== (t = e.match(/Chrom(?:e|ium)/))) && !(t = e.match(/^Mozilla\/\d+(?:\.\d+)* \(Macintosh;.*Mac OS X \d+(?:_\d+)*\) AppleWebKit\/\d+(?:\.\d+)* \(KHTML, like Gecko\)$/)) : !(t = e.match(/(iP.+; CPU .*OS 12(?:_\d+)*.*)/))
                }
            },
            browser: {
                results: {},
                supportsPassive: function() {
                    if ("undefined" == typeof BOOMR.browser.results.supportsPassive) {
                        BOOMR.browser.results.supportsPassive = !1;
                        if (!Object.defineProperty)
                            return !1;
                        try {
                            var e = Object.defineProperty({}, "passive", {
                                get: function() {
                                    BOOMR.browser.results.supportsPassive = !0
                                }
                            });
                            window.addEventListener("test", null, e)
                        } catch (t) {}
                    }
                    return BOOMR.browser.results.supportsPassive
                }
            },
            init: function(e) {
                var t, n, r = ["autorun", "beacon_auth_key", "beacon_auth_token", "beacon_with_credentials", "beacon_disable_sendbeacon", "beacon_url", "beacon_url_force_https", "beacon_type", "site_domain", "strip_query_string", "user_ip", "same_site_cookie", "secure_cookie"];
                BOOMR_check_doc_domain();
                (e = e || {}).log !== undefined && (this.log = e.log);
                this.log || (this.log = function() {}
                );
                this.pageId || (this.pageId = BOOMR.utils.generateId(8));
                if (e.primary && d.handlers_attached)
                    return this;
                if ("undefined" != typeof e.site_domain) {
                    /:/.test(e.site_domain) && (e.site_domain = c.location.hostname.toLowerCase());
                    this.session.domain = e.site_domain
                }
                BOOMR.session.enabled && "undefined" == typeof BOOMR.session.ID && (BOOMR.session.ID = BOOMR.utils.generateUUID());
                "undefined" != typeof e.autorun && (d.autorun = e.autorun);
                for (n in this.plugins)
                    if (this.plugins.hasOwnProperty(n)) {
                        if (e[n] && e[n].hasOwnProperty("enabled") && !1 === e[n].enabled) {
                            d.disabled_plugins[n] = 1;
                            "function" == typeof this.plugins[n].disable && this.plugins[n].disable();
                            continue
                        }
                        if (d.disabled_plugins[n]) {
                            if (!e[n] || !e[n].hasOwnProperty("enabled") || !0 !== e[n].enabled)
                                continue;
                            "function" == typeof this.plugins[n].enable && this.plugins[n].enable();
                            delete d.disabled_plugins[n]
                        }
                        if ("function" == typeof this.plugins[n].init)
                            try {
                                this.plugins[n].init(e)
                            } catch (i) {
                                BOOMR.addError(i, n + ".init")
                            }
                    }
                for (t = 0; t < r.length; t++)
                    e[r[t]] !== undefined && (d[r[t]] = e[r[t]]);
                if (!d.handlers_attached && !e.wait || d.handlers_attached && d.waiting_for_config) {
                    if (!d.onloadfired && (d.autorun === undefined || !1 !== d.autorun)) {
                        BOOMR.hasBrowserOnloadFired() && (BOOMR.loadedLate = !0);
                        BOOMR.attach_page_ready(BOOMR.page_ready_autorun)
                    }
                    d.waiting_for_config = !1
                }
                if (d.handlers_attached)
                    return this;
                e.wait && (d.waiting_for_config = !0);
                BOOMR.attach_page_ready(function() {
                    BOOMR.t_onload || (BOOMR.t_onload = BOOMR.now())
                });
                BOOMR.utils.addListener(c, "DOMContentLoaded", function() {
                    d.fireEvent("dom_loaded")
                });
                BOOMR.fireEvent("config", e);
                BOOMR.subscribe("config", function(e) {
                    e.beacon_url && (d.beacon_url = e.beacon_url)
                });
                BOOMR.subscribe("spa_navigation", d.spaNavigation, null, d);
                !function() {
                    var e, t;
                    if (a !== undefined) {
                        BOOMR.utils.addListener(l, a, function() {
                            d.fireEvent("visibility_changed")
                        });
                        d.lastVisibilityState = BOOMR.visibilityState();
                        BOOMR.subscribe("visibility_changed", function() {
                            var e = BOOMR.visibilityState();
                            BOOMR.lastVisibilityEvent[e] = BOOMR.now();
                            if ("prerender" === d.lastVisibilityState && "prerender" !== e) {
                                BOOMR.addVar("vis.pre", "1");
                                d.fireEvent("prerender_to_visible")
                            }
                            d.lastVisibilityState = e
                        })
                    }
                    BOOMR.utils.addListener(l, "mouseup", d.xb_handler("click"));
                    e = l.getElementsByTagName("form");
                    for (t = 0; t < e.length; t++)
                        BOOMR.utils.addListener(e[t], "submit", d.xb_handler("form_submit"));
                    c.onpagehide || null === c.onpagehide || BOOMR.utils.addListener(c, "unload", function() {
                        BOOMR.window = c = null
                    });
                    BOOMR.boomerang_frame !== BOOMR.window && BOOMR.utils.addListener(BOOMR.boomerang_frame, "unload", d.onFrameUnloaded)
                }();
                d.handlers_attached = !0;
                return this
            },
            attach_page_ready: function(e) {
                BOOMR.hasBrowserOnloadFired() ? this.setImmediate(e, null, null, BOOMR) : c.onpagehide || null === c.onpagehide ? BOOMR.utils.addListener(c, "pageshow", e) : BOOMR.utils.addListener(c, "load", e)
            },
            page_ready_autorun: function(e) {
                d.autorun && BOOMR.page_ready(e, !0)
            },
            page_ready: function(e, t) {
                var n;
                if (!t && "number" == typeof e) {
                    n = e;
                    e = null
                }
                e = (e = e || c.event) || {
                    name: "load"
                };
                if (t) {
                    if ("number" == typeof c.BOOMR_page_ready) {
                        e.timing = e.timing || {};
                        e.timing.loadEventEnd = c.BOOMR_page_ready;
                        BOOMR.addVar("pr", 1, !0)
                    }
                } else {
                    e.timing = e.timing || {};
                    n ? e.timing.loadEventEnd = n : "number" == typeof c.BOOMR_page_ready ? e.timing.loadEventEnd = c.BOOMR_page_ready : e.timing.loadEventEnd = BOOMR.now();
                    BOOMR.addVar("pr", 1, !0)
                }
                if (d.onloadfired)
                    return this;
                d.fireEvent("page_ready", e);
                d.onloadfired = !0;
                return this
            },
            hasBrowserOnloadFired: function() {
                var e = BOOMR.getPerformance();
                return l.readyState && "complete" === l.readyState || e && e.timing && 0 < e.timing.loadEventStart || 0 < c.BOOMR_onload
            },
            onloadFired: function() {
                return d.onloadfired
            },
            setImmediate: function(e, t, n, r) {
                var i = function() {
                    e.call(r || null, t, n || {}, void 0);
                    i = null
                };
                c.requestIdleCallback ? c.requestIdleCallback(i, {
                    timeout: 1e3
                }) : c.setImmediate ? c.setImmediate(i) : setTimeout(i, 10)
            },
            now: Date.now || function() {
                return (new Date).getTime()
            }
            ,
            getPerformance: function() {
                try {
                    if (BOOMR.window)
                        return "performance"in BOOMR.window && BOOMR.window.performance ? BOOMR.window.performance : BOOMR.window.msPerformance || BOOMR.window.webkitPerformance || BOOMR.window.mozPerformance
                } catch (e) {}
            },
            forceSameSiteCookieNone: function() {
                d.forced_same_site_cookie_none = !0
            },
            hrNow: function() {
                var e, t, n = BOOMR.getPerformance();
                if (n && n.now)
                    e = n.now();
                else {
                    t = BOOMR.plugins.RT && BOOMR.plugins.RT.navigationStart && BOOMR.plugins.RT.navigationStart() || BOOMR.t_lstart || BOOMR.t_start;
                    e = BOOMR.now() - t
                }
                return e
            },
            visibilityState: e === undefined ? function() {
                return "visible"
            }
            : function() {
                return l[e]
            }
            ,
            lastVisibilityEvent: {},
            registerEvent: function(e) {
                if (d.events.hasOwnProperty(e))
                    return this;
                d.events[e] = [];
                return this
            },
            disable: function() {
                d.clearEvents();
                d.clearListeners()
            },
            fireEvent: function(e, t) {
                return d.fireEvent(e, t)
            },
            subscribe: function(t, n, r, i, e) {
                var o, a, s;
                t = t.toLowerCase();
                d.translate_events[t] && (t = d.translate_events[t]);
                d.events.hasOwnProperty(t) || (d.events[t] = []);
                s = d.events[t];
                for (o = 0; o < s.length; o++)
                    if ((a = s[o]) && a.fn === n && a.cb_data === r && a.scope === i)
                        return this;
                s.push({
                    fn: n,
                    cb_data: r || {},
                    scope: i || null,
                    once: e || !1
                });
                "page_ready" === t && d.onloadfired && d.autorun && this.setImmediate(n, null, r, i);
                if ("page_unload" === t || "before_unload" === t) {
                    d.unloadEventsCount++;
                    !function() {
                        s.length;
                        var e = function(e) {
                            n && n.call(i, e || c.event, r);
                            ++d.unloadEventCalled === d.unloadEventsCount && BOOMR.real_sendBeacon()
                        };
                        "page_unload" === t && (c.onpagehide || null === c.onpagehide ? BOOMR.utils.addListener(c, "pagehide", e) : BOOMR.utils.addListener(c, "unload", e));
                        BOOMR.utils.addListener(c, "beforeunload", e)
                    }()
                }
                return this
            },
            addError: function BOOMR_addError(e, t, n) {
                var r, i = BOOMR.plugins.Errors;
                BOOMR.error("Boomerang caught error: " + e + ", src: " + t + ", extra: " + n);
                if (i && i.is_supported())
                    if ("string" == typeof e)
                        i.send({
                            message: e,
                            extra: n,
                            functionName: t,
                            noStack: !0
                        }, i.VIA_APP, i.SOURCE_BOOMERANG);
                    else {
                        "string" == typeof t && (e.functionName = t);
                        void 0 !== n && (e.extra = n);
                        i.send(e, i.VIA_APP, i.SOURCE_BOOMERANG)
                    }
                else {
                    if ("string" != typeof e) {
                        (r = String(e)).match(/^\[object/) && (r = e.name + ": " + (e.description || e.message).replace(/\r\n$/, ""));
                        e = r
                    }
                    t !== undefined && (e = "[" + t + ":" + BOOMR.now() + "] " + e);
                    n && (e += ":: " + n);
                    d.errors[e] ? d.errors[e]++ : d.errors[e] = 1
                }
            },
            isCrossOriginError: function(e) {
                return "SecurityError" === e.name || "TypeError" === e.name && "Permission denied" === e.message || "Error" === e.name && e.message && e.message.match(/^(Permission|Access is) denied/) || -2146828218 === e.number
            },
            addVar: function(e, t, n) {
                if ("string" == typeof e) {
                    d.vars[e] = t;
                    n && (d.singleBeaconVars[e] = 1)
                } else if ("object" == typeof e) {
                    var r, i = e;
                    for (r in i)
                        if (i.hasOwnProperty(r)) {
                            d.vars[r] = i[r];
                            n && (d.singleBeaconVars[r] = 1)
                        }
                }
                return this
            },
            appendVar: function(e, t) {
                var n = BOOMR.getVar(e) || "";
                n && (n += ",");
                BOOMR.addVar(e, n + t);
                return this
            },
            removeVar: function(e) {
                var t, n;
                if (!arguments.length)
                    return this;
                n = 1 === arguments.length && BOOMR.utils.isArray(e) ? e : arguments;
                for (t = 0; t < n.length; t++)
                    d.vars.hasOwnProperty(n[t]) && delete d.vars[n[t]];
                return this
            },
            hasVar: function(e) {
                return d.vars.hasOwnProperty(e)
            },
            getVar: function(e) {
                return d.vars[e]
            },
            setVarPriority: function(e, t) {
                if ("number" != typeof t || 1 !== Math.abs(t))
                    return this;
                d.varPriority[t][e] = 1;
                return this
            },
            setReferrer: function(e) {
                d.r = e
            },
            requestStart: function(t) {
                var n = BOOMR.now();
                BOOMR.plugins.RT.startTimer("xhr_" + t, n);
                return {
                    loaded: function(e) {
                        BOOMR.responseEnd(t, n, e)
                    }
                }
            },
            readyToSend: function() {
                var e;
                for (e in this.plugins)
                    if (this.plugins.hasOwnProperty(e)) {
                        if (d.disabled_plugins[e])
                            continue;
                        if ("function" == typeof this.plugins[e].readyToSend && !1 === this.plugins[e].readyToSend())
                            return !1
                    }
                return !0
            },
            responseEnd: function(e, t, n, r) {
                t = "number" == typeof t ? t : BOOMR.now();
                r = "number" == typeof r ? r : BOOMR.now();
                if (BOOMR.readyToSend())
                    if (BOOMR.hasSentPageLoadBeacon() || BOOMR.utils.inArray(e.initiator, BOOMR.constants.BEACON_TYPE_SPAS))
                        if (d.beaconInQueue)
                            BOOMR.subscribe("beacon", function() {
                                BOOMR.responseEnd(e, t, n, r)
                            }, null, BOOMR, !0);
                        else {
                            d.beaconInQueue = !0;
                            if ("object" == typeof e) {
                                if (!e.url)
                                    return;
                                d.fireEvent("xhr_load", e)
                            } else {
                                BOOMR.real_sendBeacon();
                                BOOMR.addVar("xhr.pg", e, !0);
                                BOOMR.plugins.RT.startTimer("xhr_" + e, t);
                                d.fireEvent("xhr_load", {
                                    name: "xhr_" + e,
                                    data: n,
                                    timing: {
                                        loadEventEnd: r
                                    }
                                })
                            }
                        }
                    else
                        BOOMR.subscribe("page_load_beacon", function() {
                            BOOMR.responseEnd(e, t, n, r)
                        }, null, BOOMR, !0);
                else
                    setTimeout(function() {
                        BOOMR.responseEnd(e, t, n, r)
                    }, 1e3)
            },
            uninstrumentXHR: function() {},
            instrumentXHR: function() {},
            uninstrumentFetch: function() {},
            instrumentFetch: function() {},
            sendBeacon: function(e) {
                e && (d.beacon_url_override = e);
                if (!d.beaconQueued) {
                    d.beaconQueued = !0;
                    BOOMR.setImmediate(BOOMR.real_sendBeacon, null, null, BOOMR)
                }
                return !0
            },
            sendBeaconWhenReady: function(e, t, n) {
                if (d.beaconInQueue)
                    BOOMR.subscribe("beacon", function() {
                        BOOMR.sendBeaconWhenReady(e, t, n)
                    }, null, BOOMR, !0);
                else {
                    d.beaconInQueue = !0;
                    for (var r in e)
                        e.hasOwnProperty(r) && BOOMR.addVar(r, e[r], !0);
                    "function" == typeof t && void 0 !== n && t.apply(n);
                    BOOMR.sendBeacon()
                }
            },
            real_sendBeacon: function() {
                var e, t = [], n = {};
                if (!d.beaconQueued)
                    return !1;
                d.beaconQueued = !1;
                for (e in this.plugins)
                    if (this.plugins.hasOwnProperty(e)) {
                        if (d.disabled_plugins[e])
                            continue;
                        if (!this.plugins[e].is_complete(d.vars))
                            return !1
                    }
                if (!(window && window.Image && window.navigator && BOOMR.window))
                    return !1;
                var r = BOOMR.utils.inArray(d.vars["http.initiator"], BOOMR.constants.BEACON_TYPE_SPAS)
                  , i = "undefined" == typeof d.vars["http.initiator"] || r;
                d.vars.pgu || (d.vars.pgu = r ? l.URL : l.URL.replace(/#.*/, ""));
                d.vars.pgu = BOOMR.utils.cleanupURL(d.vars.pgu);
                d.vars.u && !r || (d.vars.u = d.vars.pgu);
                d.vars.pgu === d.vars.u && delete d.vars.pgu;
                d.r ? d.vars.r = BOOMR.utils.cleanupURL(d.r) : delete d.vars.r;
                d.vars.v = BOOMR.version;
                BOOMR.snippetVersion && (d.vars.sv = BOOMR.snippetVersion);
                d.vars.sm = BOOMR.snippetMethod || "i";
                if (BOOMR.session.enabled) {
                    d.vars["rt.si"] = BOOMR.session.ID + "-" + Math.round(BOOMR.session.start / 1e3).toString(36);
                    d.vars["rt.ss"] = BOOMR.session.start;
                    d.vars["rt.sl"] = BOOMR.session.length
                } else
                    BOOMR.removeVar("rt.si", "rt.ss", "rt.sl");
                if (BOOMR.visibilityState()) {
                    d.vars["vis.st"] = BOOMR.visibilityState();
                    BOOMR.lastVisibilityEvent.visible && (d.vars["vis.lv"] = BOOMR.now() - BOOMR.lastVisibilityEvent.visible);
                    BOOMR.lastVisibilityEvent.hidden && (d.vars["vis.lh"] = BOOMR.now() - BOOMR.lastVisibilityEvent.hidden)
                }
                d.vars["ua.plt"] = navigator.platform;
                d.vars["ua.vnd"] = navigator.vendor;
                this.pageId && (d.vars.pid = this.pageId);
                d.vars.n = ++this.beaconsSent;
                c !== window && (d.vars["if"] = "");
                for (e in d.errors)
                    d.errors.hasOwnProperty(e) && t.push(e + (1 < d.errors[e] ? " (*" + d.errors[e] + ")" : ""));
                0 < t.length && (d.vars.errors = t.join("\n"));
                d.errors = {};
                d.fireEvent("before_beacon", d.vars);
                for (e in d.vars)
                    d.vars.hasOwnProperty(e) && (n[e] = d.vars[e]);
                BOOMR.removeVar(["qt", "pgu"]);
                if ("undefined" == typeof d.vars.early) {
                    for (var o in d.singleBeaconVars)
                        d.singleBeaconVars.hasOwnProperty(o) && BOOMR.removeVar(o);
                    d.singleBeaconVars = {};
                    if (!d.hasSentPageLoadBeacon && i) {
                        d.hasSentPageLoadBeacon = !0;
                        BOOMR.setImmediate(function() {
                            d.fireEvent("page_load_beacon", n)
                        })
                    }
                }
                if (BOOMR.session.rate_limited)
                    return !1;
                d.beaconInQueue = !1;
                BOOMR.sendBeaconData(n);
                return !0
            },
            sendBeaconData: function(e) {
                var t, n, r, i, o, a = [], s = !0;
                d.beacon_url = d.beacon_url_override || d.beacon_url;
                if (!d.beacon_url)
                    return !1;
                if (!d.beaconUrlAllowed(d.beacon_url))
                    return !1;
                if (BOOMR.utils.isObjectEmpty(e))
                    return !1;
                d.fireEvent("beacon", e);
                a = this.getVarsOfPriority(e, -1);
                t = this.getVarsOfPriority(e, 1);
                n = a.concat(this.getVarsOfPriority(e, 0), t).join("&");
                d.beacon_url_force_https && d.beacon_url.match(/^\/\//) && (d.beacon_url = "https:" + d.beacon_url);
                r = d.beacon_url + (-1 < d.beacon_url.indexOf("?") ? "&" : "?") + n;
                if ("GET" === d.beacon_type) {
                    s = !0;
                    r.length > BOOMR.constants.MAX_GET_LENGTH && (window.console && (console.warn || console.log) || function() {}
                    )("Boomerang: Warning: Beacon may not be sent via GET due to payload size > 2000 bytes")
                } else
                    ("POST" === d.beacon_type || r.length > BOOMR.constants.MAX_GET_LENGTH) && (s = !1);
                if (c && c.navigator && "function" == typeof c.navigator.sendBeacon && BOOMR.utils.isNative(c.navigator.sendBeacon) && "function" == typeof c.Blob && "GET" !== d.beacon_type && "undefined" == typeof d.beacon_auth_token && !d.beacon_disable_sendbeacon) {
                    var u = new c.Blob([n + "&sb=1"],{
                        type: "application/x-www-form-urlencoded"
                    });
                    if (c.navigator.sendBeacon(d.beacon_url, u))
                        return !0
                }
                BOOMR.orig_XMLHttpRequest || c && c.XMLHttpRequest || (s = !0);
                if (s) {
                    try {
                        i = new Image
                    } catch (l) {
                        return !1
                    }
                    i.src = r
                } else {
                    o = new (BOOMR.window.orig_XMLHttpRequest || BOOMR.orig_XMLHttpRequest || BOOMR.window.XMLHttpRequest);
                    try {
                        this.sendXhrPostBeacon(o, n)
                    } catch (l) {
                        o = new BOOMR.boomerang_frame.XMLHttpRequest;
                        this.sendXhrPostBeacon(o, n)
                    }
                }
                return !0
            },
            hasSentPageLoadBeacon: function() {
                return d.hasSentPageLoadBeacon
            },
            sendXhrPostBeacon: function(e, t) {
                e.open("POST", d.beacon_url);
                e.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
                if ("undefined" != typeof d.beacon_auth_token) {
                    "undefined" == typeof d.beacon_auth_key && (d.beacon_auth_key = "Authorization");
                    e.setRequestHeader(d.beacon_auth_key, d.beacon_auth_token)
                }
                d.beacon_with_credentials && (e.withCredentials = !0);
                e.send(t)
            },
            getVarsOfPriority: function(e, t) {
                var n, r = [], i = 0 !== t ? d.varPriority[t] : e;
                for (n in i)
                    if (i.hasOwnProperty(n) && e.hasOwnProperty(n)) {
                        r.push(this.getUriEncodedVar(n, "undefined" == typeof e[n] ? "" : e[n]));
                        0 !== t && delete e[n]
                    }
                return r
            },
            getUriEncodedVar: function(e, t) {
                t !== undefined && null !== t || (t = "");
                "object" == typeof t && (t = BOOMR.utils.serializeForUrl(t));
                return encodeURIComponent(e) + "=" + encodeURIComponent(t)
            },
            getResourceTiming: function(e, t, n) {
                var r, i = BOOMR.getPerformance();
                try {
                    if (i && "function" == typeof i.getEntriesByName) {
                        if (!(r = i.getEntriesByName(e)) || !r.length)
                            return;
                        if (!("function" != typeof n || (r = BOOMR.utils.arrayFilter(r, n)) && r.length))
                            return;
                        1 < r.length && "function" == typeof t && r.sort(t);
                        return r[r.length - 1]
                    }
                } catch (o) {
                    BOOMR.warn("getResourceTiming:" + o)
                }
            }
        };
        if (BOOMR.url) {
            var r = BOOMR.window.document.createElement("a");
            r.href = BOOMR.url;
            t.url = r.href
        } else
            t.url = t.utils.getMyURL();
        delete BOOMR_start;
        if ("number" == typeof BOOMR_lstart) {
            t.t_lstart = BOOMR_lstart;
            delete BOOMR_lstart
        } else
            "number" == typeof BOOMR.window.BOOMR_lstart && (t.t_lstart = BOOMR.window.BOOMR_lstart);
        "number" == typeof BOOMR.window.BOOMR_onload && (t.t_onload = BOOMR.window.BOOMR_onload);
        !function() {
            var e;
            "object" == typeof console && console.log !== undefined ? t.log = function(e, t, n) {
                console.log("(" + BOOMR.now() + ") {" + BOOMR.pageId + "}: " + n + ": [" + t + "] " + e)
            }
            : t.log = function() {}
            ;
            e = function(n) {
                return function(e, t) {
                    this.log(e, n, "boomerang" + (t ? "." + t : ""));
                    return this
                }
            }
            ;
            t.debug = e("debug");
            t.info = e("info");
            t.warn = e("warn");
            t.error = e("error")
        }();
        try {
            var i = t.getPerformance();
            i && "function" == typeof i.now && /\[native code\]/.test(String(i.now)) && i.timing && i.timing.navigationStart && (t.now = function() {
                return Math.round(i.now() + i.timing.navigationStart)
            }
            )
        } catch (u) {}
        d.checkLocalStorageSupport();
        !function() {
            var e;
            for (e in t)
                t.hasOwnProperty(e) && (BOOMR[e] = t[e]);
            BOOMR.xhr_excludes || (BOOMR.xhr_excludes = {})
        }();
        s("onBoomerangLoaded", {
            BOOMR: BOOMR
        }, !0)
    }
}(window);
!function() {
    if (!BOOMR.plugins.ConfigOverride) {
        var i = {
            safeConfigOverride: function(e, t, n) {
                for (var r in t)
                    if (e.hasOwnProperty(r) && t.hasOwnProperty(r) && ("object" != typeof t[r] || "object" == typeof e[r]))
                        if ("object" == typeof e[r] && "object" == typeof t[r]) {
                            n[r] = n[r] || {};
                            i.safeConfigOverride(e[r], t[r], n[r])
                        } else {
                            n[r] = e[r];
                            BOOMR.addVar("c.o", "")
                        }
            },
            allowedConfigOverrides: {
                Akamai: {
                    enabled: !0,
                    dns_prefetch_enabled: !0,
                    mapping_xhr_base_url: !0,
                    mapping_xhr_url_path: !0,
                    mapping_xhr_url_v4_prefix: !0,
                    mapping_xhr_url_v6_prefix: !0
                },
                Angular: {
                    enabled: !0
                },
                Ember: {
                    enabled: !0
                },
                Backbone: {
                    enabled: !0
                },
                History: {
                    enabled: !0,
                    monitorHistory: !0,
                    disableHardNav: !0,
                    routeFilter: !0,
                    routeChangeWaitFilter: !0,
                    monitorReplaceState: !0
                },
                PageParams: {
                    enabled: !0,
                    pageGroups: !0,
                    customMetrics: !0,
                    customDimensions: !0,
                    customTimers: !0,
                    abTests: !0,
                    defaultDecimal: !0,
                    defaultThousands: !0,
                    xhr: !0,
                    pci: !0,
                    pciBlacklist: !0,
                    jsVarPassArgs: !0
                },
                CrossDomain: {
                    cross_domain_url: !0,
                    sending: !0,
                    session_transfer_timeout: !0
                },
                IFrameDelay: {
                    enabled: !0,
                    monitoredCount: !0,
                    registerParent: !0
                },
                instrument_xhr: !0,
                RT: {
                    cookie: !0,
                    session_exp: !0
                },
                BW: {
                    base_url: !0,
                    enabled: !0,
                    test_https: !0
                },
                ResourceTiming: {
                    enabled: !0,
                    clearOnBeacon: !0,
                    trimUrls: !0,
                    serverTiming: !0,
                    monitorClearResourceTimings: !0,
                    splitAtPath: !0,
                    getSrcsetDimensions: !0
                },
                AutoXHR: {
                    alwaysSendXhr: !0,
                    filters: !0,
                    monitorFetch: !0,
                    fetchBodyUsedWait: !0,
                    spaIdleTimeout: !0,
                    xhrIdleTimeout: !0
                },
                Errors: {
                    enabled: !0,
                    onError: !0,
                    monitorGlobal: !0,
                    monitorNetwork: !0,
                    monitorConsole: !0,
                    monitorEvents: !0,
                    monitorTimeout: !0,
                    monitorRejection: !0,
                    monitorReporting: !0,
                    sendAfterOnload: !0,
                    maxErrors: !0,
                    sendInterval: !0
                },
                TPAnalytics: {
                    enabled: !0
                },
                Continuity: {
                    enabled: !0,
                    monitorLongTasks: !0,
                    monitorPageBusy: !0,
                    monitorFrameRate: !0,
                    monitorInteractions: !0,
                    monitorStats: !0,
                    afterOnload: !0,
                    afterOnloadMaxLength: !0,
                    afterOnloadMinWait: 5e3,
                    waitAfterOnload: !0,
                    ttiWaitForFrameworkReady: !0,
                    ttiWaitForHeroImages: !0,
                    sendLog: !0,
                    logMaxEntries: 100,
                    sendTimeline: !0
                },
                UserTiming: {
                    enabled: !0
                },
                LOGN: {
                    storeConfig: !0
                },
                Early: {
                    enabled: !0
                },
                EventTiming: {
                    enabled: !0
                },
                autorun: !0,
                beacon_disable_sendbeacon: !0,
                same_site_cookie: !0,
                secure_cookie: !0
            }
        };
        BOOMR.plugins.ConfigOverride = {
            init: function(e) {
                BOOMR.window && BOOMR.window.BOOMR_config && i.safeConfigOverride(BOOMR.window.BOOMR_config, i.allowedConfigOverrides, e);
                return this
            },
            is_complete: function() {
                return !0
            }
        }
    }
}();
!function() {
    if (!BOOMR.plugins.Continuity) {
        var y = 100
          , b = 0
          , M = 1
          , _ = 2
          , B = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_"
          , v = "."
          , w = {
            passive: !0,
            capture: !0
        }
          , E = BOOMR.getPerformance()
          , S = {}
          , T = E && E.timing && E.timing.navigationStart ? E.timing.navigationStart : BOOMR.now()
          , t = function(l) {
            var c = {}
              , r = {}
              , a = []
              , s = 0
              , u = 0
              , i = 0;
            BOOMR.fpsLog && BOOMR.fpsLog.length && (l = BOOMR.fpsLog[0] + T);
            function d() {
                return Math.floor((BOOMR.now() - l) / y)
            }
            function f() {
                var e = 0;
                if (x.ttiWaitForFrameworkReady) {
                    if (!x.frameworkReady)
                        return;
                    e = x.frameworkReady
                }
                if (BOOMR.plugins.PaintTiming && BOOMR.plugins.PaintTiming.is_supported() && E && E.timeOrigin) {
                    var t = BOOMR.plugins.PaintTiming.getTimingFor("largest-contentful-paint");
                    (t = (t = t || BOOMR.plugins.PaintTiming.getTimingFor("first-contentful-paint")) || BOOMR.plugins.PaintTiming.getTimingFor("first-paint")) && (e = Math.max(e, Math.round(t + E.timeOrigin)))
                } else if (E && E.timing && E.timing.msFirstPaint)
                    e = Math.max(e, E.timing.msFirstPaint);
                else if (BOOMR.window && BOOMR.window.chrome && "function" == typeof BOOMR.window.chrome.loadTimes) {
                    var n = BOOMR.window.chrome.loadTimes();
                    n && n.firstPaintTime && (e = Math.max(e, 1e3 * n.firstPaintTime))
                }
                E && E.timing && E.timing.domContentLoadedEventEnd && (e = Math.max(e, E.timing.domContentLoadedEventEnd));
                x.ttiWaitForHeroImages && (i = function c(e) {
                    var t, n, r, i, o, a, s = 0;
                    if (!BOOMR.window || !BOOMR.window.document || "function" != typeof BOOMR.window.document.querySelectorAll)
                        return 0;
                    if (!E || "function" != typeof E.getEntriesByType)
                        return 0;
                    t = e + ", " + e + " * img, " + e + " * image";
                    if ((n = BOOMR.window.document.querySelectorAll(t)) && n.length)
                        for (r = 0; r < n.length; r++) {
                            if (!(o = n[r].currentSrc || n[r].src || "function" == typeof n[r].getAttribute && n[r].getAttribute("xlink:href")) && "function" == typeof BOOMR.window.getComputedStyle) {
                                var u = BOOMR.window.getComputedStyle(n[r]) && BOOMR.window.getComputedStyle(n[r]).getPropertyValue("background");
                                if (u) {
                                    var l = u.match(/url\(["']?([^"']*)["']?\)/);
                                    l && 0 < l.length && (o = l[1])
                                }
                            }
                            if (o && (a = E.getEntriesByName(o)) && a.length)
                                for (i = 0; i < a.length; i++)
                                    s = Math.max(s, a[i].responseEnd)
                        }
                    return s ? Math.floor(s + T) : 0
                }(x.ttiWaitForHeroImages)) && (e = Math.max(e, i));
                return e
            }
            function p(e, t) {
                return function f(e, t, n, r, i) {
                    var o, a, s, u, l, c = "", d = 0;
                    if (!n || !BOOMR.utils.Compression)
                        return "";
                    if (0 === n.length)
                        return "";
                    if (t) {
                        "undefined" == typeof n[r] && (n[r] = 0);
                        for (o = r + 1; o <= i; o++)
                            "undefined" == typeof n[o] && (n[o] = n[o - 1])
                    }
                    for (o = r; o <= i; o++) {
                        d = "number" != typeof n[o] || isNaN(n[o]) ? 0 : n[o];
                        e === b ? s = d <= 63 ? B.charAt(d) : v + d.toString(36) + v : e === M ? s = d.toString(36) : e === _ && (s = d < 99 ? d <= 9 ? "0" + Math.max(d, 0) : d : "__");
                        if (o + 3 <= i && (n[o + 1] === d || 0 === d && n[o + 1] === undefined) && (n[o + 2] === d || 0 === d && n[o + 2] === undefined) && (n[o + 3] === d || 0 === d && n[o + 3] === undefined)) {
                            a = 1;
                            for (; o < i && (n[o + 1] === d || 0 === d && n[o + 1] === undefined); ) {
                                a++;
                                o++
                            }
                            u = "*" + a.toString(36) + "*" + s
                        } else
                            u = s;
                        if (0 !== d || o !== i) {
                            e === M && l && (c += ",");
                            l = !0;
                            c += u
                        }
                    }
                    return l ? e.toString() + c : ""
                }(r[e].compressMode, r[e].backfillLast, c[e], 0 !== t ? Math.floor((t - l) / y) : 0, d())
            }
            S.timeToInteractive = function() {
                if (s)
                    return s - T
            }
            ;
            S.timeToVisuallyReady = function() {
                if (u)
                    return u - T
            }
            ;
            S.timeToHeroImagesReady = function() {
                if (x.ttiWaitForHeroImages && i)
                    return i - T
            }
            ;
            S.timeToFrameworkReady = function() {
                if (x.ttiWaitForFrameworkReady && x.frameworkReady)
                    return x.frameworkReady - T
            }
            ;
            S.log = function() {
                return a
            }
            ;
            return {
                register: function o(e, t, n) {
                    c[e] || (c[e] = []);
                    r[e] = {
                        compressMode: t || b,
                        backfillLast: n
                    }
                },
                set: function O(e, t, n) {
                    void 0 === n && (n = d());
                    c[e] && (c[e][n] = t)
                },
                log: function m(e, t, n) {
                    void 0 === t && (t = d());
                    a.push({
                        type: e,
                        time: t,
                        val: n
                    });
                    a.length > x.logMaxEntries && Array.prototype.splice.call(a, 0, a.length - x.logMaxEntries)
                },
                increment: function h(e, t, n) {
                    void 0 === n && (n = d());
                    void 0 === t && (t = 1);
                    if (c[e]) {
                        c[e][n] || (c[e][n] = 0);
                        c[e][n] += t
                    }
                },
                getTimeBucket: d,
                getStats: function g(e, t) {
                    var n, r = 0, i = 0, o = Infinity, a = 0, s = Math.floor((t - l) / y);
                    if (!c[e])
                        return 0;
                    for (var u in c[e])
                        if (s <= (u = parseInt(u, 10)) && c[e].hasOwnProperty(u)) {
                            r++;
                            i += n = c[e][u];
                            o = Math.min(o, n);
                            a = Math.max(a, n)
                        }
                    return {
                        total: i,
                        count: r,
                        min: o,
                        max: a
                    }
                },
                analyze: function R(e) {
                    var t = d()
                      , n = 0
                      , r = 0;
                    x.sendLog && void 0 !== e && function i() {
                        for (var e = "", t = 0; t < a.length; t++) {
                            var n = a[t];
                            0 !== t && (e += "|");
                            e += n.type;
                            e += Math.round(n.time - T).toString(36);
                            for (var r in n.val)
                                if (n.val.hasOwnProperty(r)) {
                                    e += "," + r;
                                    "number" == typeof n.val[r] ? e += n.val[r].toString(36) : e += n.val[r]
                                }
                        }
                        "" !== e && x.addToBeacon("c.l", e)
                    }();
                    x.sendTimeline && void 0 !== e && function o(e) {
                        var t, n;
                        for (t in c)
                            c.hasOwnProperty(t) && "" !== (n = p(t, e)) && x.addToBeacon("c.t." + t, n)
                    }(e);
                    if (!s && (u = u || f())) {
                        x.addToBeacon("c.tti.vr", S.timeToVisuallyReady());
                        x.addToBeacon("c.tti.fr", S.timeToFrameworkReady());
                        x.addToBeacon("c.tti.hi", S.timeToHeroImagesReady());
                        if (c.longtask || c.fps || c.busy) {
                            for (n = Math.floor((u - l) / y); n <= t; n++)
                                if (c.longtask && c.longtask[n])
                                    r = 0;
                                else if (c.fps && (!c.fps[n] || c.fps[n] < 2))
                                    r = 0;
                                else if (c.busy && 50 < c.busy[n])
                                    r = 0;
                                else if (c.interdly && c.interdly[n])
                                    r = 0;
                                else if (5 <= ++r) {
                                    s = l + (n - 5) * y;
                                    s = Math.max(s, u);
                                    break
                                }
                            0 < s && x.addToBeacon("c.tti", S.timeToInteractive())
                        }
                    }
                },
                stop: function e() {
                    c = {};
                    a = []
                },
                onBeacon: function t() {
                    for (var e in c)
                        c.hasOwnProperty(e) && (c[e] = []);
                    a = []
                }
            }
        }
          , n = function(e) {
            if (e.PerformanceObserver && e.LayoutShift) {
                var r = !0
                  , i = 0
                  , t = new e.PerformanceObserver(function o(e) {
                    var t, n;
                    if (!r)
                        return;
                    t = e.getEntries();
                    for (n = 0; n < t.length; n++)
                        t[n].hadRecentInput || (i += t[n].value)
                }
                );
                try {
                    t.observe({
                        type: "layout-shift",
                        buffered: !0
                    })
                } catch (a) {
                    return
                }
                S.clsScore = function() {
                    return i
                }
                ;
                return {
                    clearClsScore: n,
                    analyze: function s(e) {
                        x.addToBeacon("c.cls", S.clsScore())
                    },
                    stop: function u() {
                        r = !1;
                        t.disconnect();
                        n()
                    },
                    onBeacon: function l() {
                        n()
                    }
                }
            }
            function n() {
                i = 0
            }
        }
          , r = function(e, r) {
            if (e.PerformanceObserver && e.PerformanceLongTaskTiming) {
                var f = {
                    unknown: 0,
                    self: 1,
                    "same-origin-ancestor": 2,
                    "same-origin-descendant": 3,
                    "same-origin": 4,
                    "cross-origin-ancestor": 5,
                    "cross-origin-descendant": 6,
                    "cross-origin-unreachable": 7,
                    "multiple-contexts": 8
                }
                  , p = {
                    unknown: 0,
                    script: 1,
                    layout: 2
                }
                  , O = {
                    unknown: 0,
                    iframe: 1,
                    embed: 2,
                    object: 3
                }
                  , t = new e.PerformanceObserver(function a(e) {
                    var t, n;
                    if (!i)
                        return;
                    t = e.getEntries();
                    Array.prototype.push.apply(m, t);
                    for (n = 0; n < t.length; n++)
                        o += t[n].duration;
                    r.increment("longtask", t.length)
                }
                );
                try {
                    t.observe({
                        entryTypes: ["longtask"]
                    })
                } catch (s) {
                    return
                }
                r.register("longtask", b);
                var m = []
                  , i = !0
                  , o = 0;
                S.longTasksTime = function() {
                    return o
                }
                ;
                S.longTasksCount = function() {
                    return m.length
                }
                ;
                return {
                    getTasks: function u() {
                        return m
                    },
                    clearTasks: n,
                    analyze: function h(e) {
                        var t, n, r, i, o, a = [], s = [];
                        if (0 !== m.length) {
                            for (t = 0; t < m.length; t++) {
                                r = m[t];
                                i = {
                                    s: Math.round(r.startTime).toString(36),
                                    d: Math.ceil(r.duration).toString(36),
                                    n: f[r.name] ? f[r.name] : 0
                                };
                                s = [];
                                for (n = 0; n < r.attribution.length; n++)
                                    if ("script" !== (o = r.attribution[n]).name || "iframe" !== o.containerType || o.containerName || o.containerId || o.containerSrc) {
                                        var u = o.containerName ? o.containerName : undefined
                                          , l = o.containerId ? o.containerId : undefined;
                                        u === l && (u = undefined);
                                        var c = l === undefined ? o.containerSrc : undefined;
                                        s.push({
                                            a: p[o.name] ? p[o.name] : 0,
                                            t: O[o.containerType] ? O[o.containerType] : 0,
                                            n: u,
                                            i: l,
                                            s: c
                                        })
                                    }
                                0 < s.length && (i.a = s);
                                a.push(i)
                            }
                            x.addToBeacon("c.lt.n", S.longTasksCount(), !0);
                            x.addToBeacon("c.lt.tt", S.longTasksTime());
                            x.addToBeacon("c.lt", function d(e) {
                                var t = window.UserTimingCompression || BOOMR.window.UserTimingCompression;
                                return t ? t.jsUrl(e) : window.JSON ? JSON.stringify(e) : ""
                            }(a))
                        }
                    },
                    stop: function l() {
                        i = !1;
                        t.disconnect();
                        n()
                    },
                    onBeacon: function c() {
                        n()
                    }
                }
            }
            function n() {
                m = [];
                o = 0
            }
        }
          , i = function(e, r) {
            r.register("busy", _);
            var i = Math.floor(3.125)
              , o = BOOMR.now()
              , a = 0
              , s = 0
              , u = 0
              , l = 0
              , t = !1
              , n = !1;
            S.pageBusy = function() {
                return 0 === u ? 0 : Math.ceil(l / u * 100)
            }
            ;
            t = setInterval(function c() {
                var e = BOOMR.now()
                  , t = e - o;
                o = e;
                if (68 < t) {
                    var n = Math.floor((t - 32) / 32);
                    a += n;
                    s += n;
                    t -= 32 * n
                }
                a++;
                36 < t && s++
            }, 32);
            n = setInterval(function d() {
                var e = r.getTimeBucket()
                  , t = e
                  , n = 0;
                if (0 !== a) {
                    for (; i + 1 < a && n <= 100; ) {
                        r.set("busy", 100, --t);
                        a -= i;
                        s = Math.max(s - i, 0);
                        u += i;
                        l += i;
                        n++
                    }
                    u += a;
                    l += s;
                    r.set("busy", Math.ceil(s / a * 100), e);
                    s = a = 0
                }
            }, 100);
            return {
                analyze: function f(e) {
                    x.addToBeacon("c.b", S.pageBusy())
                },
                stop: function p() {
                    0;
                    if (t) {
                        clearInterval(t);
                        t = !1
                    }
                    if (n) {
                        clearInterval(n);
                        n = !1
                    }
                },
                onBeacon: function O() {
                    l = u = 0
                }
            }
        }
          , o = function(t, n) {
            n.register("fps", b);
            var r, i, o = 50, a = 0, s = 0, u = !0;
            if (BOOMR.fpsLog && BOOMR.fpsLog.length) {
                i = r = BOOMR.fpsLog[0] + T;
                for (var e = 0; e < BOOMR.fpsLog.length; e++) {
                    var l = T + BOOMR.fpsLog[e];
                    n.increment("fps", 1, Math.floor((l - r) / y));
                    o <= l - i && s++;
                    i = l
                }
                a = BOOMR.fpsLog.length;
                delete BOOMR.fpsLog
            } else
                r = BOOMR.now();
            t.requestAnimationFrame(function c(e) {
                if (u) {
                    o <= e - i && s++;
                    i = e;
                    a++;
                    n.increment("fps");
                    t.requestAnimationFrame(c)
                }
            });
            S.fps = function() {
                var e = S.fpsDuration();
                if (e)
                    return Math.floor(a / (e / 1e3))
            }
            ;
            S.fpsDuration = function() {
                if (r)
                    return BOOMR.now() - r
            }
            ;
            S.fpsMinimum = function() {
                if (S.fpsDuration()) {
                    var e = n.getStats("fps", r).min;
                    return e !== Infinity ? e : undefined
                }
            }
            ;
            S.fpsLongFrames = function() {
                return s
            }
            ;
            S.fpsStart = function() {
                return r ? r.toString(36) : 0
            }
            ;
            return {
                analyze: function d(e) {
                    x.addToBeacon("c.f", S.fps());
                    x.addToBeacon("c.f.d", S.fpsDuration());
                    x.addToBeacon("c.f.m", S.fpsMinimum());
                    x.addToBeacon("c.f.l", S.fpsLongFrames());
                    x.addToBeacon("c.f.s", S.fpsStart())
                },
                stop: function f() {
                    u = !1;
                    r = 0
                },
                onBeacon: function p() {
                    u && (r = BOOMR.now());
                    s = a = 0
                }
            }
        }
          , a = function(e, i, t) {
            if (e && e.document && e.document.body && e.document.documentElement) {
                var o = 2e3
                  , a = 20
                  , s = 0
                  , u = 0
                  , l = 0
                  , c = 0
                  , d = 0
                  , f = 0
                  , p = 0
                  , O = 0
                  , n = !1
                  , r = e.document.body
                  , m = e.document.documentElement;
                i.register("scroll", b);
                i.register("scrollpct", _);
                var h = Math.max(r.scrollHeight, r.offsetHeight, m.clientHeight, m.scrollHeight, m.offsetHeight) - BOOMR.utils.windowHeight();
                S.scrollPct = function() {
                    return c
                }
                ;
                S.scrollCount = function() {
                    return d
                }
                ;
                S.scrollDistinct = function() {
                    return p
                }
                ;
                S.scrollPixels = function() {
                    return f
                }
                ;
                BOOMR.utils.addListener(e, "scroll", g, w);
                n = setInterval(function R() {
                    var e = Math.min(l, 100);
                    0 !== e && i.set("scrollpct", e);
                    l = 0
                }, y);
                return {
                    analyze: function M(e) {
                        x.addToBeacon("c.s", S.scrollCount());
                        x.addToBeacon("c.s.p", S.scrollPct());
                        x.addToBeacon("c.s.y", S.scrollPixels());
                        x.addToBeacon("c.s.d", S.scrollDistinct())
                    },
                    stop: function B() {
                        if (n) {
                            clearInterval(n);
                            n = !1
                        }
                        BOOMR.utils.removeListener(e, "scroll", g)
                    },
                    onBeacon: function v() {
                        p = f = d = c = 0
                    }
                }
            }
            function g(e) {
                var t = BOOMR.now();
                d++;
                o < t - O && p++;
                O = t;
                var n = Math.ceil(BOOMR.utils.scroll().y)
                  , r = Math.abs(s - n);
                f += r;
                i.increment("scroll", r);
                if (0 === u || Math.abs(u - n) > a) {
                    i.log(0, t, {
                        y: n
                    });
                    u = n
                }
                l += Math.round(r / h * 100);
                c += Math.round(r / h * 100);
                s = n
            }
        }
          , s = function(e, o, a) {
            o.register("click", b);
            var s = 10
              , u = 3
              , l = 0
              , c = 0
              , d = 0
              , f = 0
              , p = 0
              , O = null;
            function t(e) {
                var t = BOOMR.now()
                  , n = e.clientX
                  , r = e.clientY;
                l++;
                var i = Math.round(Math.sqrt(Math.pow(p - r, 2) + Math.pow(f - n, 2)));
                if (O === e.target || i <= s) {
                    if (u <= ++c + 1) {
                        d++;
                        BOOMR.fireEvent("rage_click", e)
                    }
                } else
                    c = 0;
                f = n;
                p = r;
                O = e.target;
                o.increment("click");
                o.log(1, t, {
                    x: n,
                    y: r
                });
                e.cancelable && a.interact("click", t, e)
            }
            S.clicksCount = function() {
                return l
            }
            ;
            S.clicksRage = function() {
                return d
            }
            ;
            BOOMR.utils.addListener(e.document, "click", t, w);
            return {
                analyze: function n(e) {
                    x.addToBeacon("c.c", S.clicksCount());
                    x.addToBeacon("c.c.r", S.clicksRage())
                },
                stop: function r() {
                    BOOMR.utils.removeListener(e.document, "click", t)
                },
                onBeacon: function i() {
                    d = c = l = 0
                }
            }
        }
          , u = function(e, n, r) {
            n.register("key", b);
            var i = 0
              , o = 0;
            function t(e) {
                var t = BOOMR.now();
                i++;
                27 === e.keyCode && o++;
                n.increment("key");
                n.log(3, t);
                e.cancelable && r.interact("key", t, e)
            }
            S.keyCount = function() {
                return i
            }
            ;
            S.keyEscapes = function() {
                return o
            }
            ;
            BOOMR.utils.addListener(e.document, "keydown", t, w);
            return {
                analyze: function a(e) {
                    x.addToBeacon("c.k", S.keyCount());
                    x.addToBeacon("c.k.e", S.keyEscapes())
                },
                stop: function s() {
                    BOOMR.utils.removeListener(e.document, "keydown", t)
                },
                onBeacon: function u() {
                    o = i = 0
                }
            }
        }
          , l = function(e, o, t) {
            o.register("mouse", b);
            o.register("mousepct", _);
            var a = 0
              , s = 0
              , n = 0
              , r = 0
              , u = 0
              , l = 0
              , c = 0
              , i = !1
              , d = !1
              , f = Math.round(Math.sqrt(Math.pow(BOOMR.utils.windowHeight(), 2) + Math.pow(BOOMR.utils.windowWidth(), 2)));
            function p(e) {
                var t = e.clientX
                  , n = e.clientY
                  , r = Math.round(Math.sqrt(Math.pow(s - n, 2) + Math.pow(a - t, 2)))
                  , i = Math.round(r / f * 100);
                u += i;
                l += i;
                c += r;
                a = t;
                s = n;
                o.increment("mouse", r)
            }
            S.mousePct = function() {
                return l
            }
            ;
            S.mousePixels = function() {
                return c
            }
            ;
            i = setInterval(function O() {
                var e = Math.min(u, 100);
                0 !== e && o.set("mousepct", e);
                u = 0
            }, y);
            d = setInterval(function m() {
                if (n !== a || r !== s) {
                    if (10 <= Math.round(Math.sqrt(Math.pow(r - s, 2) + Math.pow(n - a, 2)))) {
                        o.log(2, BOOMR.now(), {
                            x: a,
                            y: s
                        });
                        n = a;
                        r = s
                    }
                }
            }, 250);
            BOOMR.utils.addListener(e.document, "mousemove", p, w);
            return {
                analyze: function h(e) {
                    x.addToBeacon("c.m.p", S.mousePct());
                    x.addToBeacon("c.m.n", S.mousePixels())
                },
                stop: function g() {
                    if (i) {
                        clearInterval(i);
                        i = !1
                    }
                    if (d) {
                        clearInterval(d);
                        d = !1
                    }
                    BOOMR.utils.removeListener(e.document, "mousemove", p)
                },
                onBeacon: function R() {
                    c = l = 0
                }
            }
        }
          , c = function(i, o, e) {
            o.register("inter", b);
            o.register("interdly", b);
            var a = e
              , s = 0
              , u = null
              , l = 0
              , c = 0
              , d = 0
              , f = 0
              , p = !0
              , O = 0
              , m = 0
              , h = !1
              , g = !1
              , R = !1
              , n = !1;
            function t() {
                if (h) {
                    clearTimeout(h);
                    h = !1
                }
                if (g) {
                    clearTimeout(g);
                    g = !1
                }
            }
            function M() {
                BOOMR.sendBeaconWhenReady({
                    "rt.start": "manual",
                    "http.initiator": "interaction",
                    "rt.tstart": O,
                    "rt.end": m
                }, function() {
                    t();
                    BOOMR.fireEvent("interaction")
                }, x)
            }
            S.interactionDelayed = function() {
                return d
            }
            ;
            S.interactionDelayedTime = function() {
                return Math.ceil(f)
            }
            ;
            S.interactionAvgDelay = function() {
                if (0 < l)
                    return Math.ceil(c / l)
            }
            ;
            S.timeToFirstInteraction = function() {
                if (s)
                    return s - T
            }
            ;
            S.firstInputDelay = function() {
                if (null !== u)
                    return u
            }
            ;
            BOOMR.subscribe("spa_init", function r() {
                R = !0;
                t()
            }, null, x);
            return {
                interact: function B(e, t, n) {
                    var r = 0;
                    BOOMR.hrNow();
                    t = t || BOOMR.now();
                    if (p) {
                        l++;
                        s = s || (n && n.timeStamp ? n.timeStamp + T : t);
                        if (n && n.timeStamp && (!x.isSafari || i === window)) {
                            r = 14e11 < n.timeStamp ? t - n.timeStamp : BOOMR.hrNow() - n.timeStamp;
                            c += r;
                            null === u && (u = Math.ceil(r));
                            if (50 < r) {
                                o.increment("interdly");
                                d++;
                                f += r
                            }
                        }
                        o.increment("inter");
                        if (!R && x.afterOnloadMonitoring) {
                            m = BOOMR.now();
                            if (!O) {
                                O = m;
                                g = setTimeout(M, 3e4)
                            }
                            if (h) {
                                clearTimeout(h);
                                h = !1
                            }
                            h = setTimeout(M, a)
                        }
                    }
                },
                analyze: function v(e) {
                    var t;
                    x.addToBeacon("c.i.dc", S.interactionDelayed());
                    x.addToBeacon("c.i.dt", S.interactionDelayedTime());
                    x.addToBeacon("c.i.a", S.interactionAvgDelay());
                    if (!n) {
                        BOOMR.plugins.EventTiming && BOOMR.plugins.EventTiming.is_enabled() && (t = BOOMR.plugins.EventTiming.metrics.firstInputDelay());
                        t || null === u || (t = S.firstInputDelay());
                        if (t) {
                            x.addToBeacon("c.fid", Math.ceil(t), !0);
                            x.addToBeacon("c.ttfi", BOOMR.plugins.EventTiming.metrics.timeToFirstInteraction() || S.timeToFirstInteraction());
                            n = !0
                        }
                    }
                },
                stop: function y() {
                    p = !1
                },
                onBeacon: function _() {
                    m = O = c = l = d = f = 0;
                    R = !1;
                    t()
                }
            }
        }
          , d = function(e, t, n) {
            var r, i, o = !0;
            function a() {
                if (o) {
                    n.interact("pd", r, i);
                    i = r = null;
                    BOOMR.utils.removeListener(window, "pointerup", a)
                }
            }
            function s(e) {
                if (o && e.cancelable) {
                    r = BOOMR.now();
                    i = e;
                    BOOMR.utils.addListener(window, "pointerup", a, w)
                }
            }
            function u() {
                o = !1;
                BOOMR.utils.removeListener(window, "pointerdown", s);
                BOOMR.utils.removeListener(window, "pointerup", a);
                BOOMR.utils.removeListener(window, "pointercancel", u)
            }
            BOOMR.utils.addListener(window, "pointerdown", s, w);
            BOOMR.utils.addListener(window, "pointercancel", u, w);
            return {
                stop: u
            }
        }
          , f = function(e, t, n) {
            var r = !0;
            function i(e) {
                if (r && e.cancelable) {
                    var t = BOOMR.now();
                    n.interact("md", t, e)
                }
            }
            BOOMR.utils.addListener(window, "mousedown", i, w);
            return {
                stop: function o() {
                    r = !1;
                    BOOMR.utils.removeListener(window, "mousedown", i)
                }
            }
        }
          , p = function(e, t, n) {
            var r = !0;
            function i(e) {
                if (r && e.cancelable) {
                    var t = BOOMR.now();
                    n.interact("ts", t, e)
                }
            }
            BOOMR.utils.addListener(window, "touchstart", i, w);
            return {
                stop: function o() {
                    r = !1;
                    BOOMR.utils.removeListener(window, "touchstart", i)
                }
            }
        }
          , O = function(e, n, t) {
            n.register("vis", b);
            var r = {
                visible: 0,
                hidden: 1,
                prerender: 2,
                unloaded: 3
            }
              , i = !0;
            BOOMR.subscribe("visibility_changed", function(e) {
                var t = BOOMR.now();
                if (i) {
                    n.increment("vis");
                    n.log(4, t, {
                        s: r[BOOMR.visibilityState()]
                    })
                }
            });
            return {
                stop: function o() {
                    i = !1
                }
            }
        }
          , m = function(e, i, t) {
            i.register("orn", b);
            var o = !0;
            function n(e) {
                var t = BOOMR.now()
                  , n = window.orientation;
                if (o) {
                    i.increment("orn");
                    var r = window.screen && (screen.orientation || screen.msOrientation || screen.mozOrientation || {});
                    r && "number" == typeof r.angle && (n = screen.orientation.angle);
                    "number" == typeof n && i.log(5, t, {
                        a: n
                    })
                }
            }
            BOOMR.utils.addListener(e, "orientationchange", n, w);
            return {
                stop: function r() {
                    o = !1;
                    BOOMR.utils.removeListener(e, "orientationchange", n)
                }
            }
        }
          , h = function(e, n) {
            n.register("mem", M, !0);
            n.register("bat", _, !0);
            n.register("domsz", M, !0);
            n.register("domln", M, !0);
            n.register("mut", b);
            var t, r = e.document, i = !0, o = !1, a = null, s = 0, u = 0, l = r.getElementsByTagName("*");
            function c() {
                i && a && n.set("bat", a.level)
            }
            o = setInterval(function d() {
                var e = E && E.memory && E.memory.usedJSHeapSize;
                e && n.set("mem", e);
                u = l.length;
                n.set("domsz", r.documentElement.innerHTML.length);
                n.set("domln", u);
                if (0 < s) {
                    var t = Math.min(Math.round(s / u * 100), 100);
                    n.set("mut", t);
                    s = 0
                }
            }, 1e3);
            e.navigator && "function" == typeof e.navigator.getBattery && e.navigator.getBattery().then(function(e) {
                (a = e).onlevelchange && (a.onlevelchange = c)
            });
            BOOMR.utils.isMutationObserverSupported() && (t = BOOMR.utils.addObserver(r, {
                childList: !0,
                subtree: !0
            }, null, function f(e) {
                e.forEach(function(e) {
                    if ("childList" !== e.type)
                        return !0;
                    for (var t = 0; t < e.addedNodes.length; t++) {
                        var n = e.addedNodes[t];
                        s++;
                        s += n.getElementsByTagName ? n.getElementsByTagName("*").length : 0
                    }
                });
                return !0
            }, null, this));
            return {
                stop: function p() {
                    i = !1;
                    if (o) {
                        clearInterval(o);
                        o = !1
                    }
                    if (t && t.observer) {
                        t.observer.disconnect();
                        t = null
                    }
                    a && a.onlevelchange && (a.onlevelchange = null);
                    l = null
                }
            }
        }
          , x = {
            monitorLongTasks: !0,
            monitorPageBusy: !0,
            monitorFrameRate: !0,
            monitorInteractions: !0,
            monitorStats: !1,
            monitorLayoutShifts: !0,
            afterOnload: !1,
            afterOnloadMaxLength: 6e4,
            afterOnloadMinWait: 5e3,
            waitAfterOnload: !1,
            ttiWaitForFrameworkReady: !1,
            ttiWaitForHeroImages: !1,
            sendLog: !0,
            sendTimeline: !0,
            logMaxEntries: 100,
            initialized: !1,
            complete: !1,
            isSpa: !1,
            firedPageReady: !1,
            afterOnloadMonitoring: !1,
            frameworkReady: null,
            timeline: null,
            ttiMethod: null,
            longTaskMonitor: null,
            pageBusyMonitor: null,
            frameRateMonitor: null,
            interactionMonitor: null,
            scrollMonitor: null,
            clickMonitor: null,
            keyMonitor: null,
            mouseMonitor: null,
            visibilityMonitor: null,
            orientationMonitor: null,
            touchStartMonitor: null,
            mouseDownMonitor: null,
            pointerDownMonitor: null,
            statsMonitor: null,
            layoutShiftMonitor: null,
            monitors: ["timeline", "longTaskMonitor", "pageBusyMonitor", "frameRateMonitor", "scrollMonitor", "keyMonitor", "clickMonitor", "mouseMonitor", "interactionMonitor", "visibilityMonitor", "orientationMonitor", "statsMonitor", "layoutShiftMonitor", "touchStartMonitor", "mouseDownMonitor", "pointerDownMonitor"],
            timeOfLastBeacon: 0,
            hasAddedDataToBeacon: !1,
            isSafari: window && window.navigator && window.navigator.vendor && -1 !== window.navigator.vendor.indexOf("Apple"),
            onBeforeBeacon: function() {
                x.runAllAnalyzers()
            },
            runAllAnalyzers: function() {
                var e, t;
                if (!x.hasAddedDataToBeacon) {
                    for (e = 0; e < x.monitors.length; e++)
                        (t = x[x.monitors[e]]) && "function" == typeof t.analyze && t.analyze(x.timeOfLastBeacon);
                    x.addToBeacon("c.lb", x.timeOfLastBeacon ? x.timeOfLastBeacon.toString(36) : 0);
                    x.timeOfLastBeacon = BOOMR.now();
                    x.hasAddedDataToBeacon = !0
                }
            },
            onBeacon: function(e) {
                var t;
                if (!e || !("undefined" != typeof e.early || e["http.initiator"] && 0 === e["http.initiator"].indexOf("api_custom_"))) {
                    for (t = 0; t < x.monitors.length; t++) {
                        var n = x[x.monitors[t]];
                        if (n) {
                            x.afterOnload || "function" == typeof n.stop && n.stop();
                            "function" == typeof n.onBeacon && n.onBeacon()
                        }
                    }
                    x.hasAddedDataToBeacon = !1
                }
            },
            onXhrLoad: function(e) {
                e && BOOMR.utils.inArray(e.initiator, BOOMR.constants.BEACON_TYPE_SPAS) && (x.isSpa = !0);
                e && "spa_hard" === e.initiator && x.onPageReady()
            },
            onPageReady: function() {
                x.firedPageReady = !0;
                if (x.afterOnload && x.monitorInteractions) {
                    x.afterOnloadMonitoring = !0;
                    x.isSpa || "number" != typeof x.afterOnloadMaxLength || setTimeout(function() {
                        x.afterOnloadMonitoring = !1
                    }, x.afterOnloadMaxLength)
                }
                if (x.waitAfterOnload) {
                    var e = BOOMR.now();
                    setTimeout(function t() {
                        if (BOOMR.now() - e > x.waitAfterOnload) {
                            x.complete = !0;
                            BOOMR.sendBeacon()
                        } else {
                            x.timeline.analyze();
                            if (S.timeToInteractive()) {
                                x.complete = !0;
                                BOOMR.sendBeacon()
                            } else
                                setTimeout(t, 500)
                        }
                    }, 500)
                } else
                    x.complete = !0
            },
            addToBeacon: function(e, t, n) {
                0 !== t && void 0 !== t || n ? BOOMR.addVar(e, t, !0) : BOOMR.removeVar(e)
            }
        };
        BOOMR.plugins.Continuity = {
            init: function(e) {
                BOOMR.utils.pluginConfig(x, e, "Continuity", ["monitorLongTasks", "monitorPageBusy", "monitorFrameRate", "monitorInteractions", "monitorStats", "afterOnload", "afterOnloadMaxLength", "afterOnloadMinWait", "waitAfterOnload", "ttiWaitForFrameworkReady", "ttiWaitForHeroImages", "sendLog", "logMaxEntries", "sendTimeline", "monitorLayoutShifts"]);
                if (x.initialized)
                    return this;
                x.initialized = !0;
                x.timeline = new t(BOOMR.now());
                if (BOOMR.window) {
                    if (x.monitorLongTasks && BOOMR.window.PerformanceObserver && BOOMR.window.PerformanceLongTaskTiming) {
                        x.longTaskMonitor = new r(BOOMR.window,x.timeline);
                        x.ttiMethod = "lt"
                    }
                    if (x.monitorFrameRate && "function" == typeof BOOMR.window.requestAnimationFrame) {
                        x.frameRateMonitor = new o(BOOMR.window,x.timeline);
                        x.ttiMethod || (x.ttiMethod = "raf")
                    }
                    if (x.monitorPageBusy && (!BOOMR.window.PerformanceObserver || !BOOMR.window.PerformanceLongTaskTiming || !x.monitorLongTasks)) {
                        x.pageBusyMonitor = new i(BOOMR.window,x.timeline);
                        x.ttiMethod || (x.ttiMethod = "b")
                    }
                    if (x.monitorInteractions) {
                        x.interactionMonitor = new c(BOOMR.window,x.timeline,x.afterOnloadMinWait);
                        x.scrollMonitor = new a(BOOMR.window,x.timeline,x.interactionMonitor);
                        x.keyMonitor = new u(BOOMR.window,x.timeline,x.interactionMonitor);
                        x.clickMonitor = new s(BOOMR.window,x.timeline,x.interactionMonitor);
                        x.mouseMonitor = new l(BOOMR.window,x.timeline,x.interactionMonitor);
                        x.visibilityMonitor = new O(BOOMR.window,x.timeline,x.interactionMonitor);
                        x.orientationMonitor = new m(BOOMR.window,x.timeline,x.interactionMonitor);
                        x.touchStartMonitor = new p(BOOMR.window,x.timeline,x.interactionMonitor);
                        x.mouseDownMonitor = new f(BOOMR.window,x.timeline,x.interactionMonitor);
                        x.pointerDownMonitor = new d(BOOMR.window,x.timeline,x.interactionMonitor)
                    }
                    x.monitorStats && (x.statsMonitor = new h(BOOMR.window,x.timeline,x.interactionMonitor));
                    x.monitorLayoutShifts && BOOMR.window.PerformanceObserver && (x.layoutShiftMonitor = new n(BOOMR.window))
                }
                BOOMR.addVar("c.e", T.toString(36));
                BOOMR.addVar("c.tti.m", x.ttiMethod);
                BOOMR.subscribe("before_beacon", x.onBeforeBeacon, null, x);
                BOOMR.subscribe("beacon", x.onBeacon, null, x);
                BOOMR.subscribe("page_ready", x.onPageReady, null, x);
                BOOMR.subscribe("xhr_load", x.onXhrLoad, null, x);
                return this
            },
            is_complete: function(e) {
                return x.complete || e && ("error" === e["http.initiator"] || "undefined" != typeof e.early)
            },
            frameworkReady: function() {
                x.frameworkReady = BOOMR.now()
            },
            metrics: S
        }
    }
}();
!function() {
    var p, f, O, s, m;
    if (!BOOMR.plugins.PageParams) {
        var h, e = /(-?(?:[1-9][\d,]*)?[0-9](?:\.\d+)?)/, o = ["img", "iframe", "script", "link", "object", "svg", "video"], r = {
            name: 1,
            "honorific-prefix": 1,
            "given-name": 1,
            "additional-name": 1,
            "family-name": 1,
            "honorific-suffix": 1,
            username: 1,
            "new-password": 1,
            "current-password": 1,
            "street-address": 1,
            country: 1,
            "country-name": 1,
            "postal-code": 1,
            email: 1,
            tel: 1
        }, i = ["cc-", "address-", "tel-"], n = [/(?:3[47][0-9]{13})/, /(?:3(?:0[0-5]|[68][0-9])[0-9]{11})/, /(?:6(?:011|5[0-9]{2})(?:[0-9]{12}))/, /(?:(?:2131|1800|35\d{3})\d{11})/, /(?:(?:5[0678]\d\d|6304|6390|67\d\d)\d{8,15})/, /(?:(?:5[1-5][0-9]{2}|222[1-9]|22[3-9][0-9]|2[3-6][0-9]{2}|27[01][0-9]|2720)[0-9]{12})/, /(?:4[0-9]{12})(?:[0-9]{3})?/, /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/], g = function() {
            return {
                pageGroups: {
                    varname: "h.pg",
                    stopOnFirst: !0,
                    isDimension: !0
                },
                abTests: {
                    varname: "h.ab",
                    stopOnFirst: !0,
                    isDimension: !0
                },
                customMetrics: {
                    cleanUpRE: e
                },
                customDimensions: {
                    sanitizeRE: /[^\w\. \-]/g,
                    isDimension: !0
                },
                customTimers: {
                    cleanUpRE: e,
                    method: BOOMR.plugins.RT && BOOMR.plugins.RT.setTimer,
                    ctx: BOOMR.plugins.RT,
                    preProcessor: function(e) {
                        return Math.round("number" == typeof e ? e : parseFloat(e, 10))
                    }
                }
            }
        }, a = ["src", "href", "data", "codebase"], u = {
            ".,": e
        }, l = {
            ".": /\./g,
            ",": /,/g,
            " ": / /g,
            "'": /'/g
        };
        (h = function(e) {
            this.varname = e.varname;
            this.method = e.method || function(e, t) {
                BOOMR.addVar(e, t, !0)
            }
            ;
            this.ctx = e.ctx || BOOMR;
            this.preProcessor = e.preProcessor;
            this.sanitizeRE = e.sanitizeRE || /[^\w \-]/g;
            this.cleanUpRE = e.cleanUpRE;
            this.resourceTime = {};
            this.resources = [];
            this.RTSupport = !1;
            this.MOSupport = !1;
            return this
        }
        ).prototype = {
            apply: function(e) {
                this.preProcessor && (e = this.preProcessor(e));
                if (!e && 0 !== e)
                    return !1;
                "function" == typeof this.method && this.method.call(this.ctx, this.varname, e);
                return !0
            },
            handle: function(e, t, n) {
                var r = this;
                if (!this.isValid(e))
                    return !1;
                e.label && ("ResourceGroup" === e.type && m.resourceGroupHandlers[e.label] ? r = m.resourceGroupHandlers[e.label] : (r = new h(this)).varname = e.label);
                return r[e.type](e, t, n)
            },
            isValid: function(e) {
                return e && "object" == typeof e && e.hasOwnProperty("type") && "function" == typeof this[e.type] && (this.varname || e.label)
            },
            cleanUp: function(e, t) {
                var n, r, i, o, a = this.cleanUpRE;
                if (!e)
                    return e;
                if (a) {
                    r = t && t.decimal ? t.decimal : m.defaultDecimal;
                    i = t && t.thousands ? t.thousands : m.defaultThousands;
                    if (("." !== r || "," !== i) && void 0 === (a = u[o = r + i])) {
                        a = new RegExp("(-?(?:[1-9][\\d" + i + "]*)?[0-9](?:\\" + r + "\\d+)?)");
                        u[o] = a
                    }
                    if ((n = e.match(a)) && 1 < n.length) {
                        e = n[1];
                        if (void 0 === (a = l[i])) {
                            a = new RegExp("\\" + i,"g");
                            l[i] = a
                        }
                        e = e.replace(a, "");
                        "." !== r && (e = e.replace(r, "."));
                        return e
                    }
                    return ""
                }
                return e.replace(this.sanitizeRE, "")
            },
            isValidObjectMember: function(e, t) {
                return null !== e && ("object" == typeof e || (!("function" != typeof e || !e.hasOwnProperty(t)) || !("string" != typeof e || !e.hasOwnProperty(t))))
            },
            extractFromDOMElement: function(e, t) {
                var n, r = "";
                if (m.pci && this.hasSensitiveData(e)) {
                    BOOMR.appendVar("pci.redacted", t.label);
                    return !1
                }
                null === e || !e.nodeName || "INPUT" !== e.nodeName.toUpperCase() && "TEXTAREA" !== e.nodeName.toUpperCase() && "SELECT" !== e.nodeName.toUpperCase() ? null !== e && (r = e.textContent || e.innerText) : ("checkbox" !== e.type.toLowerCase() && "radio" !== e.type.toLowerCase() || e.checked) && (r = e.value);
                if (m.pci && this.isSensitiveData(r)) {
                    BOOMR.appendVar("pci.redacted", t.label);
                    return !1
                }
                if (t.match && "numeric" !== t.match) {
                    if ("boolean" === t.match)
                        r = 1;
                    else if (t.match.match(/^regex:/)) {
                        if (!(n = t.match.match(/^regex:(.*)/)) || n.length < 2)
                            return !1;
                        try {
                            new RegExp(n[1],"i").test(r) && (r = 1)
                        } catch (i) {
                            BOOMR.addError(i, "PageVars.URLPatternType", t.match);
                            return !1
                        }
                    }
                } else
                    r = this.cleanUp(r, t);
                return r
            },
            hasSensitiveData: function(e) {
                var t;
                if (!e)
                    return !1;
                if (e.nodeName && ("INPUT" === e.nodeName.toUpperCase() || "TEXTAREA" === e.nodeName.toUpperCase() || "SELECT" === e.nodeName.toUpperCase())) {
                    var n = e.autocomplete || "function" == typeof e.getAttribute && e.getAttribute("autocomplete");
                    if (n && n.length) {
                        n = n.toLowerCase();
                        if (r[n])
                            return !0;
                        for (t = 0; t < i.length; t++)
                            if (0 === n.indexOf(i[t]))
                                return !0
                    }
                }
                if (m.pciBlacklist && m.pciBlacklist.length) {
                    if (!m.pciBlacklistQueried) {
                        m.pciBlacklistMatch = this.runQuerySelector(m.pciBlacklist, O, !0);
                        m.pciBlacklistQueried = !0
                    }
                    if (m.pciBlacklistMatch && m.pciBlacklistMatch.length)
                        for (t = 0; t < m.pciBlacklistMatch.length; t++)
                            if (e === m.pciBlacklistMatch[t])
                                return !0
                }
                return !1
            },
            isSensitiveData: function(e) {
                var t;
                if (!e || !e.length)
                    return !1;
                for (t = 0; t < n.length; t++)
                    if (n[t].exec(e))
                        return !0;
                return !1
            },
            execSafeRegEx: function(e, t) {
                if (!(e instanceof RegExp))
                    try {
                        e = new RegExp(e,"i")
                    } catch (n) {
                        BOOMR.addError(n, "PageVars.handleRegEx", e);
                        return !1
                    }
                return void 0 !== t && e.exec(t)
            },
            handleRegEx: function(e, t, n) {
                var r, i = this.execSafeRegEx(e, n);
                if (!i || !i.length)
                    return !1;
                r = t.replace(/\$([1-9])/g, function(e, t) {
                    return decodeURIComponent(i[parseInt(t, 10)])
                });
                r = this.cleanUp(r);
                return this.apply(r)
            },
            checkURLPattern: function(e, t, n) {
                var r;
                if (!e)
                    return !0;
                r = e.replace(/([.+?\^=!:${}()|\[\]\/\\])/g, "\\$1").replace(/\*/g, ".*?");
                try {
                    r = new RegExp("^" + r + "$","i")
                } catch (i) {
                    BOOMR.addError(i, "PageVars.checkURLPattern", e);
                    return !1
                }
                t = t || f.href;
                return !!r.exec(t)
            },
            nodeWalk: function(e, t) {
                var n, r, i, o;
                if (!t)
                    return e;
                if (!(n = t.match(/^(\w+)(?:\[(\d+)\])?\/?(.*)/)) || !n.length)
                    return null;
                r = e.getElementsByTagName(n[1]);
                if (n[2]) {
                    i = parseInt(n[2], 10);
                    if (isNaN(i))
                        return null;
                    i--;
                    if (r.length <= i)
                        return null;
                    r = [r[i]]
                }
                for (i = 0; i < r.length; i++)
                    if (o = this.nodeWalk(r[i], n[3]))
                        return o;
                return null
            },
            runXPath: function(e, t) {
                var n, r, i, o = !1;
                t = t || O;
                try {
                    t.evaluate ? n = t.evaluate(e, t, null, 9, null) : t.selectNodes ? n = t.selectNodes(e) : o = !0
                } catch (a) {
                    i = a;
                    o = !0
                }
                if (!n && o)
                    try {
                        if (e.match(/^\/html(?:\/\w+(?:\[\d+\])?)*$/)) {
                            e = e.slice(6);
                            return this.nodeWalk(O, e)
                        }
                        if (null !== (r = e.match(/\[@id=(["'])([^"']+)\1\]((?:\/\w+(?:\[\d+\])?)*)$/)))
                            return (n = t.getElementById(r[2])) && r[3] ? this.nodeWalk(n, r[3].slice(1)) : n;
                        if (null !== (r = e.match(/\[@class="([^"]+)"\]((?:\/\w+(?:\[\d+\])?)*)$/))) {
                            (n = t.getElementsByClassName(r[1])) && n.length && (n = n[0]);
                            return n && r[2] ? this.nodeWalk(n, r[2].slice(1)) : n
                        }
                        if (i) {
                            BOOMR.error("Error evaluating XPath: " + i, "PageVars");
                            BOOMR.addError(i, "PageVars.runXPath.native", e)
                        }
                        return null
                    } catch (a) {
                        BOOMR.error("Error evaluating XPath: " + a, "PageVars");
                        BOOMR.addError(a, "PageVars.runXPath.ours", e);
                        return null
                    }
                return n && 9 === n.resultType && n.singleNodeValue ? n.singleNodeValue : null
            },
            runQuerySelector: function(e, t, n) {
                var r;
                n = n || !1;
                t = t || O;
                try {
                    if (!t.querySelector && !t.querySelectorAll)
                        return null;
                    r = n ? t.querySelectorAll(e) : t.querySelector(e)
                } catch (i) {
                    BOOMR.error("" + i, "PageVars");
                    BOOMR.addError(i, "PageVars.runQueryselector", e);
                    return null
                }
                return r
            },
            JavaScriptVar: function(e) {
                var t;
                if (!this.checkURLPattern(e.parameter1))
                    return !1;
                if (t = this.extractJavaScriptVariable(e.varName, e))
                    return t;
                m.mayRetry.push({
                    handler: this,
                    data: e
                });
                return !1
            },
            Custom: function(e) {
                var t;
                if (!this.checkURLPattern(e.parameter2))
                    return !1;
                if (t = this.extractJavaScriptVariable(e.parameter1, e))
                    return t;
                m.mayRetry.push({
                    handler: this,
                    data: e
                });
                return !1
            },
            extractJavaScriptVariable: function(e, t, n) {
                var r, i, o, a = n || p;
                if (!e)
                    return !1;
                r = e.split(/\[((["'])[\w,.-]*\2|\d*)\]|\./);
                for (o = 0; o < r.length; o++)
                    r[o] && (r[o] = r[o].replace(/("|')/g, ""));
                if (!(r = BOOMR.utils.arrayFilter(r, function(e) {
                    return e && 0 < e.length
                })) || 0 === r.length)
                    return !1;
                i = a[r.shift()];
                try {
                    for (; r.length && this.isValidObjectMember(i, r[0]); )
                        i = (a = i)[r.shift()]
                } catch (s) {
                    BOOMR.addError(s, "PageVars.extractJavaScriptVariable", e + "::" + r.join("."));
                    return !1
                }
                if (0 !== r.length)
                    return !1;
                if ("function" == typeof i)
                    try {
                        i = m.jsVarPassArgs ? i.call(a, this.varname) : i.call(a)
                    } catch (s) {
                        BOOMR.plugins.Errors && BOOMR.plugins.Errors.send(s);
                        return !1
                    }
                if (void 0 === i || "object" == typeof i || "function" == typeof i)
                    return !1;
                if (t && "boolean" === t.match) {
                    if ("string" == typeof i) {
                        if ("0" !== (i = i.replace(/^\s+|\s+$/g, "").toLowerCase()) && "false" !== i && i)
                            return this.apply(1)
                    } else if (i)
                        return this.apply(1);
                    return undefined
                }
                i = this.cleanUp(String(i), t);
                return this.apply(i)
            },
            URLPattern: function(e) {
                var t;
                if (!e.parameter2)
                    return !1;
                if (!this.checkURLPattern(e.parameter1))
                    return !1;
                if (t = BOOMR.utils.getQueryParamValue(e.parameter2, f)) {
                    t = this.cleanUp(t);
                    return this.apply(t)
                }
            },
            URLSubstringEndOfText: function(e) {
                return this.URLSubstringTrailingText(e)
            },
            URLSubstringTrailingText: function(e) {
                return !!e.parameter1 && this.handleRegEx("^" + e.parameter1.replace(/([.+?\^=!:${}()|\[\]\/\\])/g, "\\$1").replace(/([^\.])\*/g, "$1.*?").replace(/^\*/, ".*") + "(.*)" + (e.parameter2 || "").replace(/([.+?\^=!:${}()|\[\]\/\\])/g, "\\$1").replace(/([^\.])\*/g, "$1.*") + "$", "$1", f.href)
            },
            UserAgentRegex: function(e) {
                return this._Regex(e.parameter1, e.regex, e.replacement, navigator.userAgent)
            },
            CookieRegex: function(e) {
                return this._Regex(e.parameter1, e.regex, e.replacement, e.cookieName ? BOOMR.utils.getCookie(e.cookieName) : O.cookie)
            },
            URLRegex: function(e) {
                return this._Regex(e.parameter1, e.regex, e.replacement, f.href)
            },
            Regexp: function(e, t) {
                var n;
                t && "string" == typeof t && (n = t.match("http(|s)://"));
                return n && 0 < n.length ? this._Regex(null, e.parameter1, e.parameter2, t, e.ignore) : this._Regex(null, e.parameter1, e.parameter2, f.href, e.ignore)
            },
            _Regex: function(e, t, n, r, i) {
                i && (n = "1");
                return !(!t || !n) && (!!this.checkURLPattern(e) && this.handleRegEx(t, n, r))
            },
            URLPatternType: function(e) {
                var t;
                if (!this.checkURLPattern(e.parameter1))
                    return !1;
                if (!e.parameter1 || e.parameter2 || e.queryselector)
                    if (e.queryselector) {
                        if (!(t = this.runQuerySelector(e.queryselector)))
                            return !1;
                        t = this.extractFromDOMElement(t, e)
                    } else {
                        if (!e.parameter2)
                            return !1;
                        if (!(t = this.runXPath(e.parameter2)))
                            return !1;
                        t = this.extractFromDOMElement(t, e)
                    }
                else
                    t = "1";
                return this.apply(t)
            },
            ResourceTiming: function(e) {
                var t, n, r, i, o, a;
                if (!e.parameter2 && !e.url && !e.queryselector)
                    return !1;
                if (!e.start || !e.end && "*" !== e.start)
                    return !1;
                if (!s || !s.getEntriesByName)
                    return !1;
                if (!this.checkURLPattern(e.parameter1))
                    return !1;
                "slowest" === e.parameter2 || "slowest" === e.url ? n = "slowest" : e.url ? n = e.url : e.parameter2 ? t = this.runXPath(e.parameter2) : e.queryselector && (t = this.runQuerySelector(e.queryselector));
                if (t)
                    n = t.currentSrc || t.src || "function" == typeof t.getAttribute && t.getAttribute("xlink:href") || t.href;
                else if (!n)
                    return !1;
                if (!(r = this.findResource(n, null, m.deltaFromNavStart))) {
                    m.mayRetry.push({
                        handler: this,
                        data: e
                    });
                    return !1
                }
                "slowest" === n && BOOMR.addVar("dom.res.slowest", r.name, !0);
                if ("*" === e.start) {
                    for (a in r)
                        r.hasOwnProperty(a) && a.match(/(Start|End)$/) && 0 < r[a] && BOOMR.addVar(this.varname + "." + a.replace(/^(...).*(St|En).*$/, "$1$2"), Math.round(r[a]), !0);
                    return this.apply(r.duration)
                }
                if (e.relative_to_nt || "navigationStart" === e.start)
                    i = m.deltaFromNavStart;
                else {
                    i = parseFloat(r[e.start], 10);
                    if (!isNaN(i) && 0 === i)
                        return !1
                }
                o = parseFloat(r[e.end], 10);
                if (isNaN(i) || isNaN(o))
                    return !1;
                if (0 === o)
                    return !1;
                BOOMR.addVar(this.varname + "_st", Math.round(i - m.deltaFromNavStart), !0);
                return this.apply(o - i)
            },
            findResource: function(e, t, n) {
                var r = this.findResources(e, t, n, 1);
                return null !== r && r && 0 < r.length ? r[0] : null
            },
            getFrameResources: function(e, t) {
                try {
                    e.location && e.location.href;
                    return "performance"in e && e.performance && e.performance.getEntriesByName && e.performance.getEntriesByType ? t ? e.performance.getEntriesByName(t) : e.performance.getEntriesByType("resource") : null
                } catch (n) {
                    if (BOOMR.isCrossOriginError(n))
                        return null;
                    try {
                        if ("TypeError" === n.name && "Invalid calling object" === n.message && e.document.location.pathname.match(/\.pdf$/))
                            return null
                    } catch (r) {}
                    BOOMR.addError(n, "PageVars.getFrameResources");
                    return null
                }
            },
            findResources: function(e, t, n, r) {
                var i, o, a, s, u, l, c, d = [];
                t = t || p;
                n = n || 0;
                if ("slowest" !== e) {
                    if (null === (a = this.getFrameResources(t, e)))
                        return null;
                    if (a && 0 < a.length)
                        for (i = 0; i < a.length; i++)
                            if (!(a[i].startTime < n)) {
                                d.push(a[i]);
                                if (r && d.length === r)
                                    return d
                            }
                }
                if (e && (-1 !== e.indexOf("*") || "slowest" === e) && (a = this.getFrameResources(t)) && 0 < a.length)
                    for (i = 0; i < a.length; i++)
                        if (!(a[i].startTime < n))
                            if ("slowest" === e)
                                (!o || a[i].duration > o.duration) && (o = a[i]);
                            else if (a[i].name && this.checkURLPattern(e, a[i].name, !1)) {
                                d.push(a[i]);
                                if (r && d.length === r)
                                    return d
                            }
                if (t.frames) {
                    u = function f(e) {
                        try {
                            return e.frames.length
                        } catch (t) {
                            return 0
                        }
                    }(t);
                    for (s = 0; s < u; s++)
                        if ((c = t.frames[s]) && c !== t && (l = this.findResources(e, c, n, r ? r - d.length : 0)))
                            for (i = 0; i < l.length; i++)
                                if ("slowest" === e)
                                    (!o || l[i].duration > o.duration) && (o = l[i]);
                                else {
                                    d.push(l[i]);
                                    if (r && d.length === r)
                                        return d
                                }
                }
                return o ? [o] : d
            },
            UserTiming: function(e) {
                var t, n;
                if (!e.parameter2)
                    return !1;
                if (!s || "function" != typeof s.getEntriesByType)
                    return !1;
                if (!this.checkURLPattern(e.parameter1))
                    return !1;
                t = s.getEntriesByType("mark");
                for (n = 0; t && n < t.length; n++)
                    if (!(t[n].startTime < m.deltaFromNavStart) && t[n].name === e.parameter2)
                        return this.apply(t[n].startTime);
                t = s.getEntriesByType("measure");
                for (n = 0; t && n < t.length; n++)
                    if (!(t[n].startTime < m.deltaFromNavStart) && t[n].name === e.parameter2) {
                        t[n].startTime && BOOMR.addVar(this.varname + "_st", Math.round(t[n].startTime), !0);
                        return this.apply(t[n].duration)
                    }
                m.mayRetry.push({
                    handler: this,
                    data: e
                })
            },
            Payload: function(e, t, n) {
                var r, i, o, a, s = BOOMR.window.DOMParser, u = BOOMR.window.JSON;
                if (!n)
                    return null;
                if (e.url && !this.checkURLPattern(e.url, n.url))
                    return null;
                if (e.parameter1 && e.parameter2) {
                    if (!n.response || !n.response.raw)
                        return null;
                    if ("queryselector" === e.parameter1 || "xpath" === e.parameter1) {
                        if (n.response.xml) {
                            "queryselector" === e.parameter1 ? r = this.runQuerySelector(e.parameter2, n.response.xml) : "xpath" === e.parameter1 && (r = this.runXPath(e.parameter2, n.response.xml));
                            if (!r)
                                try {
                                    if (s) {
                                        i = (new s).parseFromString(n.response.raw);
                                        "queryselector" === e.parameter1 ? r = this.runQuerySelector(e.parameter2, i) : "xpath" === e.parameter1 && (r = this.runXPath(e.parameter2, i))
                                    }
                                } catch (c) {
                                    return null
                                }
                            return this.apply(this.extractFromDOMElement(r, e))
                        }
                    } else if ("json" === e.parameter1) {
                        if (n.response.json)
                            return this.extractJavaScriptVariable(e.parameter2, e, n.response.json);
                        if (n.response.raw)
                            try {
                                if (window.JSON && "function" == typeof u.parse) {
                                    var l = u.parse(n.response.raw);
                                    return this.extractJavaScriptVariable(e.parameter2, e, l)
                                }
                            } catch (c) {
                                return null
                            }
                    } else if ("substring" === e.parameter1) {
                        n.response.text || n.response.raw;
                        return (o = this.execSafeRegEx(e.parameter2, n.response.text)) && o.length ? !!(a = this.cleanUp(o[0])) && this.apply(a) : !1
                    }
                }
                return null
            },
            ResourceGroup: function(e, t) {
                var n, r, i, o, a, s, u, l, c = [];
                if (BOOMR.utils.isArray(t)) {
                    u = t[0];
                    l = t[1]
                } else {
                    u = t;
                    l = BOOMR.window.document.URL
                }
                s = "load" === (s = void 0 !== u ? u : "onload") ? "onload" : u;
                if (e.value) {
                    this.config = e;
                    for (n in e.value)
                        if (e.value.hasOwnProperty(n) && this.checkURLPattern(n, l) && e.value[n].resources && 0 < e.value[n].resources.length) {
                            if (e.value[n].on && 0 < e.value[n].on.length && (BOOMR.utils.inArray(s, e.value[n].on) || "init" === s && BOOMR.utils.inArray("onload", e.value[n].on)))
                                for (var d in e.value[n].resources)
                                    e.value[n].resources.hasOwnProperty(d) && c.push(e.value[n].resources[d]);
                            break
                        }
                    if (0 === c.length)
                        return null;
                    this.resourceSet = c;
                    (r = BOOMR.getPerformance()) && "function" == typeof r.getEntriesByName && "function" == typeof r.getEntriesByType && (this.RTSupport = !0);
                    this.MOSupport = BOOMR.utils.isMutationObserverSupported();
                    this.eventsrc = s;
                    if (this.RTSupport)
                        for (i = 0; i < c.length; i++) {
                            "init" !== s && "xhr" !== s && this.refreshResourceGroupTimings(this.lookupResources(i), i);
                            this.MOSupport && ("init" === s || this.isOnPageEvent()) && (this.obs = this.setupMutationObserver(i))
                        }
                    else if (this.RTSupport || !this.MOSupport || "init" !== s && !this.isOnPageEvent()) {
                        if (!this.RTSupport && !this.MOSupport && ("init" === s || this.isOnPageEvent()))
                            for (i = 0; i < c.length; i++)
                                (o = this.setupListener(i)) && (this.listener = o)
                    } else
                        for (i = 0; i < c.length; i++)
                            (a = this.setupMutationObserver(i)) && (this.observer = a);
                    if ("onload" === s && !this.attached) {
                        this.applyTimedResources(!0);
                        this.attached = !0
                    }
                    return this
                }
            },
            setupMutationObserver: function(e) {
                var t = this.resourceSet[e]
                  , n = null
                  , r = 0
                  , i = this.getNode(e)
                  , o = {
                    childList: !0,
                    attributes: !0,
                    subtree: !0,
                    attributeFilter: a
                };
                if (!this.isOnPageEvent() && "onload" === this.eventsrc)
                    return null;
                "resource" === t.type && (i = BOOMR.window.document.body);
                if (!i && null === i) {
                    this.resourceSet[e].found = !1;
                    this.resourceSet[e].fallback = !0;
                    i = BOOMR.window.document.body
                }
                if (!i || "number" != typeof i.length) {
                    if (i && !this.isContainer(i)) {
                        this.resourceSet[e].found = !0;
                        return null
                    }
                    this.traverseElements(i, e);
                    return BOOMR.utils.addObserver(i, o, null, this.mutationCb.bind(this), e, this)
                }
                for (r = 0; r < i.length; r++) {
                    n = i[r];
                    this.traverseElements(n, e);
                    !n || this.isContainer(n) ? BOOMR.utils.addObserver(n, o, null, this.mutationCb.bind(this), e, this) : this.resourceSet[e].found = !0
                }
            },
            setupListener: function(e) {
                var t = this.resourceSet[e]
                  , n = this.getNode(e)
                  , r = null
                  , i = 0
                  , o = this
                  , a = BOOMR.now()
                  , s = 0
                  , u = null;
                "resource" === t.type && (n = BOOMR.window.document.body);
                if ((!n || null === n) && BOOMR.window.document.body) {
                    this.resourceSet[e].found = !1;
                    this.resourceSet[e].fallback = !0;
                    n = BOOMR.window.document.body
                }
                if (BOOMR.window.document.body !== n || null !== n) {
                    if (n && 0 < n.length) {
                        this.resourceSet[e].found = !0;
                        for (s = 0; s < n.length; s++) {
                            u = n[s];
                            this.isContainer(u) ? this.traverseElements(n, e) : this.initResourceGroupListener(u, e)
                        }
                        return null
                    }
                    if (!n || this.isContainer(n)) {
                        this.traverseElements(n, e);
                        r = setInterval(function l() {
                            if (500 <= i)
                                clearInterval(r);
                            else {
                                o.traverseElements(n, e);
                                i += BOOMR.now() - a;
                                a = BOOMR.now()
                            }
                        }, 100)
                    } else {
                        this.resourceSet[e].found = !0;
                        this.initResourceGroupListener(n, e)
                    }
                }
            },
            findResourceChildren: function(e) {
                var t, n, r, i = [];
                if (!e || !e.getElementsByTagName)
                    return i;
                for (t = 0; t < o.length; t++) {
                    r = e.getElementsByTagName(o[t]);
                    for (n = 0; n < r.length; n++)
                        i.push(r[n])
                }
                return i
            },
            attachContainerElements: function(e, t) {
                var n, r, i = this.resourceSet[t], o = this.findResourceChildren(e);
                for (n in o) {
                    r = this.getNodeURL(o[n]);
                    if ("resource" === i.type && r && this.checkURLPattern(i.value, r)) {
                        this.resourceSet[t].found = !0;
                        this.initResourceGroupListener(o[n], t);
                        break
                    }
                    "resource" !== i.type || r && this.checkURLPattern(i.value, r) ? this.initResourceGroupListener(o[n], t) : !r && this.isOnPageEvent() && this.initResourceGroupListener(o[n], t)
                }
            },
            traverseElements: function(e, t) {
                var n = this.resourceSet[t]
                  , r = this.getNodeURL(e);
                if ("resource" === n.type)
                    if (r && this.checkURLPattern(n.value, r)) {
                        this.resourceSet[t].found = !0;
                        this.initResourceGroupListener(e, t)
                    } else
                        this.isContainer(e) && this.attachContainerElements(e, t);
                else if (this.isContainer(e) && !n.fallback) {
                    this.resourceSet[t].found = !0;
                    this.attachContainerElements(e, t)
                } else if (!this.isContainer(e)) {
                    this.resourceSet[t].found = !0;
                    this.initResourceGroupListener(e, t)
                }
            },
            mutationCb: function(e, t) {
                this.resourceSet[t];
                var n, r, i, o, a, s, u = [];
                if (e && 0 < e.length) {
                    for (i = 0; i < e.length; i++)
                        if ((r = e[i]).addedNodes && 0 < r.addedNodes.length) {
                            a = r.addedNodes;
                            for (s = 0; s < a.length; s++)
                                u.push(a[s])
                        }
                    if (u && 0 < u.length) {
                        n = this.getNode(t);
                        this.RTSupport && this.refreshResourceGroupTimings(this.lookupResources(t), t);
                        for (o = 0; o < u.length; o++)
                            this.traverseElements(u[o], t);
                        if (n && !n.hasOwnProperty("length") && this.obs && this.obs.observer && this.resourceSet[t].fallback) {
                            this.resourceSet[t].fallback = !1;
                            this.obs.observer.disconnect();
                            clearTimeout(this.obs.timer);
                            this.setupMutationObserver(t)
                        }
                    }
                }
            },
            isOnPageEvent: function(e) {
                return e ? "spa" === e || "spa_hard" === e || "xhr" === e : "spa" === this.eventsrc || "spa_hard" === this.eventsrc || "xhr" === this.eventsrc
            },
            resourceSetIsResolved: function() {
                var e = this.getUnresolvedIndex();
                return "boolean" == typeof e || "number" != typeof e && void 0
            },
            getUnresolvedIndex: function() {
                for (var e = 0; e < this.resourceSet.length; e++)
                    if (!this.resourceSet[e].found)
                        return e;
                return !1
            },
            hasUnresolvedAddVar: function() {
                if (this.resourceSetIsResolved())
                    return !1;
                var e = this.getUnresolvedIndex();
                BOOMR.addVar(this.varname + "_rg.err", "nf|" + e, !0);
                this.resolved = !1;
                BOOMR.debug("Resource Group '" + this.config.label + "' has not been resolved fully, not going to apply timer!", "PageVars.ResourceGroup");
                return !0
            },
            applyTimedResources: function(e) {
                if (isNaN(this.resourceTime.start) || isNaN(this.resourceTime.stop))
                    return !1;
                if (0 === this.resourceTime.stop)
                    return !1;
                if (this.hasUnresolvedAddVar())
                    return !1;
                this.resolved = !0;
                BOOMR.removeVar(this.varname + "_rg.err");
                BOOMR.addVar(this.varname + "_st", Math.round(this.resourceTime.start), !0);
                if (this.obs && this.obs.observer) {
                    this.obs.observer.disconnect();
                    clearTimeout(this.obs.timer)
                }
                return this.apply(this.resourceTime.stop - this.resourceTime.start)
            },
            lookupResources: function(e) {
                var t, n, r, i, o = this.resourceSet[e], a = this.getNode(e), s = [], u = 0, l = 0, c = this.getStartTime(e);
                if (a && "undefined" == typeof a.length) {
                    this.resourceSet[e].found = !0;
                    if (t = this.getNodeURL(a))
                        s = this.findResources(t);
                    else {
                        n = this.findChildElements(a);
                        for (var d = 0; d < n.length; d++)
                            s.push(this.findResource(this.getNodeURL(n[d])))
                    }
                } else if (a && "number" == typeof a.length && 0 < a.length && !a[0][c] && "resource" !== o.type)
                    for (u = 0; u < a.length; u++) {
                        r = a[u];
                        if (this.isContainer(r))
                            this.traverseElements(r, e);
                        else if (i = this.findResources(this.getNodeURL(r))) {
                            this.resourceSet[e].found = !0;
                            for (l = 0; l < i.length; l++)
                                s.push(i[l])
                        }
                    }
                else if (a && "number" == typeof a.length) {
                    0 < a.length && (this.resourceSet[e].found = !0);
                    return a
                }
                return s
            },
            refreshResourceGroupTimings: function(e, t) {
                if (e && 0 < e.length) {
                    for (var n = 0; n < e.length; n++)
                        this.updateResourceGroupDelta(e[n], t);
                    this.applyTimedResources()
                }
            },
            isContainer: function(e) {
                if (e && "string" == typeof e.nodeName)
                    return !this.getNodeURL(e)
            },
            getNode: function(e) {
                var t, n = this.resourceSet[e];
                switch (n.type) {
                case "xpath":
                    t = this.runXPath(n.value);
                    break;
                case "queryselector":
                    t = this.runQuerySelector(n.value, !1, !0);
                    break;
                case "resource":
                    this.RTSupport && (t = this.findResources(n.value))
                }
                t || (this.resourceSet[e].found = !1);
                return t
            },
            findChildElements: function(e) {
                var t, n, r, i = [];
                for (r in o) {
                    t = e.getElementsByTagName(o[r]);
                    for (n = 0; n < t.length; n++)
                        i.push(t[n])
                }
                return i
            },
            getNodeURL: function(e) {
                var t;
                if (!e)
                    return null;
                switch (e.nodeName) {
                case "IMG":
                case "IFRAME":
                case "SCRIPT":
                case "LINK":
                case "OBJECT":
                case "SVG":
                    for (var n = 0; n < a.length; n++)
                        if ("string" == typeof (t = e[a[n]]) && 0 < t.length)
                            return t;
                    break;
                default:
                    return null
                }
            },
            getStartTime: function(e) {
                var t = this.resourceSet[e]
                  , n = "fetchStart";
                t.start && (n = t.start);
                return n
            },
            updateResourceGroupDelta: function(e, t) {
                var n, r = this.getStartTime(t);
                if (e) {
                    n = (n = e.responseEnd) || BOOMR.hrNow();
                    "navigationStart" !== r ? (!this.resourceTime.start || this.resourceTime.start > e[r]) && (this.resourceTime.start = e[r]) : this.resourceTime.start = m.deltaFromNavStart;
                    (!this.resourceTime.stop || this.resourceTime.stop < n) && (this.resourceTime.stop = n)
                }
            },
            initResourceGroupListener: function(e, t) {
                var n, r = this.resourceSet[t], i = this.getStartTime(t);
                e._bmr_rg = e._bmr_rg || {};
                e._bmr_rg[i] = e._bmr_rg[i] ? e._bmr_rg[i] : BOOMR.hrNow();
                if (e._bmr_rg_resource) {
                    if (e._bmr_rg_resource && !e._bmr_rg_resource.hasOwnProperty("length")) {
                        n = e._bmr_rg_resource;
                        e._bmr_rg_resource = []
                    }
                    e._bmr_rg_resource.push(n, r);
                    this.addResourceGroupListener(e, t)
                } else {
                    e._bmr_rg_resource = r;
                    this.addResourceGroupListener(e, t)
                }
            },
            addResourceGroupListener: function(e, o) {
                var a = this
                  , s = this.resourceSet[o];
                function t(e) {
                    var t, n = e.target ? e.target : e.srcElement, r = a.getNodeURL(n), i = a.getStartTime(o);
                    if (r) {
                        if (a.RTSupport) {
                            t = a.findResources(r);
                            if ("resource" === s.type && a.checkURLPattern(s.value, r)) {
                                if (t && 0 < t.length) {
                                    a.resourceSet[o].found = !0;
                                    a.refreshResourceGroupTimings(t, o)
                                }
                            } else
                                a.refreshResourceGroupTimings(t, o)
                        } else if ("resource" === s.type && a.checkURLPattern(s.value, r)) {
                            n._bmr_rg.responseEnd = n._bmr_rg.responseEnd || BOOMR.hrNow();
                            a.updateResourceGroupDelta(n._bmr_rg, o)
                        } else if (n._bmr_rg && n._bmr_rg.responseEnd && n._bmr_rg[i])
                            a.updateResourceGroupDelta(n._bmr_rg, o);
                        else {
                            n._bmr_rg.responseEnd = n._bmr_rg.responseEnd || BOOMR.hrNow();
                            a.updateResourceGroupDelta(n._bmr_rg, o)
                        }
                        a.applyTimedResources()
                    }
                }
                e.complete && this.getNodeURL(e) ? t({
                    target: e
                }) : e.addEventListener ? e.addEventListener("load", t) : e.attachEvent && e.attachEvent("onload", t)
            }
        };
        BOOMR.utils.runXPath = h.prototype.runXPath;
        BOOMR.utils.runQuerySelector = h.prototype.runQuerySelector;
        h.prototype.XPath = h.prototype.URLPatternType;
        h.prototype.URLQueryParam = h.prototype.URLPattern;
        m = {
            pageGroups: [],
            abTests: [],
            customTimers: [],
            customMetrics: [],
            customDimensions: [],
            xhrPageGroups: [],
            resourceGroupHandlers: {},
            complete: !1,
            initialized: !1,
            configReceived: !1,
            rerunAfterConfig: !1,
            unloadFired: !1,
            onloadfired: !1,
            defaultDecimal: ".",
            defaultThousands: ",",
            hasXhrOn: !1,
            hasXhrIgnore: !1,
            autorun: !0,
            pci: !1,
            pciBlacklist: [],
            pciBlacklistQueried: !1,
            pciBlacklistMatch: [],
            beaconQueue: [],
            mayRetry: [],
            deltaFromNavStart: 0,
            jsVarPassArgs: !0,
            matchPageGroupList: function(e, t, n) {
                for (var r = 0, r = 0; r < t.length; r++)
                    if (n.handle(t[r], e))
                        return !0;
                return !1
            },
            excludeXhrFilter: function(e) {
                var t, n, r = 0, i = !1;
                if (!m.xhr)
                    return !1;
                (t = g()).pageGroups.varname = "xhr.pg";
                n = m.hasXhrOn ? m.xhrPageGroups : m.pageGroups;
                var o = new h(t.pageGroups);
                o.method = null;
                if ("match" === m.xhr) {
                    if (n && 0 === n.length)
                        return !1;
                    for (r = 0; r < n.length; r++)
                        if (o.handle(n[r], e.href) && !n[r].ignore) {
                            i = !0;
                            break
                        }
                    return i ? !1 : !0
                }
                if ("none" === m.xhr)
                    return !0;
                if ("all" === m.xhr || "subresource" === m.xhr)
                    for (r = 0; r < n.length; r++)
                        if (n[r].ignore && o.handle(n[r], e.href))
                            return !0;
                return !1
            },
            done: function(t, e) {
                var n, r, i, o, a, s, u, l = m, c = !1;
                if (m.configReceived) {
                    i = g();
                    if ("xhr" === e || "error" === e || "rerun" === e || !this.complete) {
                        BOOMR_check_doc_domain();
                        if ("xhr" === e && t && !BOOMR.utils.inArray(t.initiator, BOOMR.constants.BEACON_TYPE_SPAS)) {
                            if (null === (l = m.extractXHRParams(t, i)))
                                return;
                            m.complete = !1;
                            if ((a = t.data ? t.data : t).url) {
                                (f = O.createElement("a")).href = a.url;
                                if ("subresource" === m.xhr) {
                                    (s = new h(i.pageGroups)).method = null;
                                    m.matchPageGroupList(f.href, m.hasXhrOn ? m.xhrPageGroups : m.pageGroups, s) || (t.subresource = "active")
                                }
                                m.hasXhrOn ? l.pageGroups = m.xhrPageGroups : l.pageGroups = m.pageGroups;
                                i.pageGroups.varname = "xhr.pg";
                                i.pageGroups.preProcessor = function(e) {
                                    if (e && e.match(/_subresource$/)) {
                                        e = e.replace(/_subresource$/, "");
                                        t.subresource = "passive"
                                    }
                                    return e
                                }
                            }
                        } else {
                            f = p.location;
                            "error" !== e && "early" !== e && (this.complete = !0)
                        }
                        "error" === e && (c = !0);
                        m.clearMetrics();
                        m.mayRetry = [];
                        if ("xhr" === e && t && "spa" === t.initiator && t.timing && t.timing.requestStart) {
                            u = BOOMR.plugins.RT && BOOMR.plugins.RT.navigationStart && BOOMR.plugins.RT.navigationStart() || BOOMR.t_lstart || BOOMR.t_start;
                            m.deltaFromNavStart = t.timing.requestStart - u
                        } else
                            m.deltaFromNavStart = 0;
                        for (r in i)
                            if (i.hasOwnProperty(r)) {
                                o = new h(i[r]);
                                if (c && !i[r].isDimension)
                                    continue;
                                if ("xhr" === e && "pageGroups" === r && a && a.pg && "string" == typeof a.pg) {
                                    o.apply(a.pg);
                                    continue
                                }
                                for (n = 0; n < l[r].length; n++)
                                    if ("xhr" === e || !l[r][n].only_xhr) {
                                        var d = "xhr" === e && t && BOOMR.utils.inArray(t.initiator, BOOMR.constants.BEACON_TYPE_SPAS) ? t.initiator : e;
                                        if (o.handle(l[r][n], d, a) && i[r].stopOnFirst) {
                                            l[r][n].subresource && "xhr" === e && t && (t.subresource = "active");
                                            break
                                        }
                                    }
                            }
                        BOOMR.sendBeacon()
                    }
                } else
                    m.rerunAfterConfig = {
                        edata: t,
                        ename: e
                    }
            },
            retry: function() {
                var e, t, n, r = m.mayRetry;
                m.mayRetry = [];
                for (e = 0; e < r.length; e++)
                    if (r[e]) {
                        n = t = null;
                        try {
                            (t = r[e].handler)[(n = r[e].data).type](n)
                        } catch (i) {
                            BOOMR.addError(i, "PageVars.retry." + (n ? n.type : "?") + "." + (t ? t.varname : "?"))
                        }
                    }
            },
            initResourceGroupHandlers: function(e) {
                var t, n, r, i = g();
                if (i.hasOwnProperty("customTimers")) {
                    n = new h(i.customTimers);
                    for (var o = 0; o < m.customTimers.length; o++)
                        "ResourceGroup" === m.customTimers[o].type && (t = m.customTimers[o]).label && !m.resourceGroupHandlers.hasOwnProperty(t.label) && (r = n.handle(t, e)) && (m.resourceGroupHandlers[t.label] = r)
                }
            },
            removeResolvedResourceGroupHandlers: function() {
                var e;
                for (e in m.resourceGroupHandlers)
                    m.resourceGroupHandlers.hasOwnProperty(e) && m.resourceGroupHandlers[e].resolved && delete m.resourceGroupHandlers[e]
            },
            clearMetrics: function() {
                m.pciBlacklistQueried = !1
            },
            onload: function() {
                this.onloadfired = !0
            },
            extractXHRParams: function(e, t) {
                var n, r, i, o, a, s, u, l, c, d, f;
                if (!e)
                    return null;
                if (!((f = e.data ? e.data : e).url || f.timers && f.timers.length || f.metrics && f.metrics.length || f.dimensions && f.dimensions.length))
                    return null;
                n = {
                    pageGroups: [],
                    abTests: m.abTests,
                    customTimers: [],
                    customMetrics: [],
                    customDimensions: []
                };
                r = {
                    timers: {
                        impl: "customTimers",
                        data: f.timers
                    },
                    metrics: {
                        impl: "customMetrics",
                        data: f.metrics
                    },
                    dimensions: {
                        impl: "customDimensions",
                        data: f.dimensions
                    }
                };
                for (i in r)
                    if (r.hasOwnProperty(i))
                        if ((o = r[i]).data && o.data.length)
                            for (c = 0; c < o.data.length; c++) {
                                a = (u = o.data[c].split(/\s*=\s*/))[0];
                                s = u[1];
                                for (l = 0; l < m[o.impl].length; l++)
                                    if (m[o.impl][l].name === a)
                                        if (void 0 === s)
                                            n[o.impl].push(m[o.impl][l]);
                                        else {
                                            (d = new h(t[o.impl])).varname = m[o.impl].label;
                                            d.apply(d.cleanUp(s));
                                            d = null
                                        }
                            }
                        else if (f.url)
                            for (l = 0; l < m[o.impl].length; l++)
                                m[o.impl][l].xhr_ok && n[o.impl].push(m[o.impl][l]);
                return n
            },
            onunload: function() {
                m.unloadFired = !0;
                return this
            },
            onBeforeBeacon: function(e) {
                e && "error" === e["http.initiator"] && m.done({}, "error")
            },
            onBeforeEarlyBeacon: function(e) {
                this.complete = !1;
                this.done({}, "early")
            },
            prerenderToVisible: function() {
                this.complete = !1;
                this.done({}, "load")
            },
            runPageParamsHandler: function(e, t) {
                var n, r, i, o = g()[e], a = m[e];
                f = BOOMR.window.location;
                o.method = t;
                r = new h(o);
                for (n = 0; n < a.length; n++)
                    if (!a[n].only_xhr && (i = r.handle(a[n], "custom")) && o.stopOnFirst)
                        return i
            },
            runAllDimensions: function(e) {
                m.runPageParamsHandler("pageGroups", e);
                m.runPageParamsHandler("abTests", e);
                m.runPageParamsHandler("customDimensions", e)
            },
            sendMetric: function(e, t) {
                if ("string" == typeof e && (void 0 === t || "number" == typeof t)) {
                    void 0 === t && (t = 1);
                    var n = {};
                    n[e] = t;
                    m.sendMetrics(n)
                }
            },
            sendMetrics: function(e) {
                "object" == typeof e && m.addToBeaconQueue({
                    metrics: e
                })
            },
            sendTimer: function(e, t) {
                if ("string" == typeof e && "number" == typeof t) {
                    var n = {};
                    n[e] = t;
                    m.sendTimers(n)
                }
            },
            sendTimers: function(e) {
                "object" == typeof e && m.addToBeaconQueue({
                    timers: e
                })
            },
            sendAll: function(e) {
                "object" == typeof e && m.addToBeaconQueue(e)
            },
            addToBeaconQueue: function(n) {
                n.timestamp || (n.timestamp = BOOMR.now());
                n.vars || (n.vars = {});
                m.configReceived ? m.runAllDimensions(function(e, t) {
                    n.vars[e] = t
                }) : n.needsDimensions = !0;
                m.beaconQueue.push(n);
                BOOMR.setImmediate(m.processBeaconQueue)
            },
            processBeaconQueue: function(e) {
                var t, n, r, i = {}, o = !1, a = !1;
                if (0 !== m.beaconQueue.length && m.configReceived) {
                    t = m.beaconQueue.shift();
                    i["rt.tstart"] = t.timestamp;
                    i["rt.end"] = t.timestamp;
                    i["http.initiator"] = "api_custom_" + (t.timers ? "timer" : "metric");
                    if (t.metrics)
                        for (r in t.metrics)
                            if (t.metrics.hasOwnProperty(r)) {
                                o = !1;
                                for (n = 0; n < m.customMetrics.length; n++)
                                    if (r === m.customMetrics[n].name) {
                                        o = a = !0;
                                        i[m.customMetrics[n].label] = t.metrics[r];
                                        break
                                    }
                                o || BOOMR.warn("Custom Metric " + r + " not found")
                            }
                    if (t.timers)
                        for (r in t.timers)
                            if (t.timers.hasOwnProperty(r)) {
                                o = !1;
                                for (n = 0; n < m.customTimers.length; n++)
                                    if (r === m.customTimers[n].name) {
                                        o = a = !0;
                                        i.t_other ? i.t_other += "," : i.t_other = "";
                                        i.t_other += m.customTimers[n].label + "|" + t.timers[r];
                                        break
                                    }
                                o || BOOMR.warn("Custom Timer " + r + " not found")
                            }
                    if (a) {
                        for (var s in t.vars)
                            t.vars.hasOwnProperty(s) && (i[s] = t.vars[s]);
                        i.n = ++BOOMR.beaconsSent;
                        m.sendBeacon(i);
                        BOOMR.setImmediate(m.processBeaconQueue)
                    } else
                        BOOMR.warn("No data found to send, aborting Custom beacon")
                }
            },
            sendBeacon: function(e) {
                e.d = BOOMR.session.domain;
                e["h.key"] = BOOMR.getVar("h.key");
                e["h.d"] = BOOMR.getVar("h.d");
                e["h.cr"] = BOOMR.getVar("h.cr");
                e["h.t"] = BOOMR.getVar("h.t");
                e.pid = BOOMR.pageId;
                e["rt.start"] = "manual";
                if (BOOMR.session && !1 !== BOOMR.session.ID) {
                    e["rt.si"] = BOOMR.session.ID + "-" + Math.round(BOOMR.session.start / 1e3).toString(36);
                    e["rt.ss"] = BOOMR.session.start;
                    e["rt.sl"] = BOOMR.session.length
                }
                e.api = 1;
                e["api.v"] = 2;
                e["api.l"] = "boomr";
                e.v = BOOMR.version;
                BOOMR.fireEvent("before_custom_beacon", e);
                BOOMR.sendBeaconData(e)
            }
        };
        BOOMR.sendMetric = m.sendMetric;
        BOOMR.sendMetrics = m.sendMetrics;
        BOOMR.sendTimer = m.sendTimer;
        BOOMR.sendTimers = m.sendTimers;
        BOOMR.sendAll = m.sendAll;
        BOOMR.plugins.PageParams = {
            init: function(e) {
                var n, t = 0, r = [];
                p = BOOMR.window;
                f = p.location;
                O = p.document;
                s = BOOMR.getPerformance();
                BOOMR.utils.pluginConfig(m, e, "PageParams", ["pageGroups", "abTests", "customTimers", "customMetrics", "customDimensions", "autorun", "defaultDecimal", "defaultThousands", "xhr", "pci", "pciBlacklist", "jsVarPassArgs"]);
                m.complete = !1;
                if ("undefined" != typeof e.PageParams) {
                    if (m.pageGroups && 0 < m.pageGroups.length)
                        for (t = 0; t < m.pageGroups.length; t++)
                            if (m.pageGroups[t]) {
                                if (m.pageGroups[t].on && BOOMR.utils.inArray("xhr", m.pageGroups[t].on) || m.pageGroups[t].ignore) {
                                    m.xhrPageGroups.push(m.pageGroups[t]);
                                    m.hasXhrOn = !0;
                                    m.pageGroups[t].ignore && (m.hasXhrIgnore = !0);
                                    if (m.pageGroups[t].on && 1 === m.pageGroups[t].on.length || m.pageGroups[t].ignore)
                                        continue
                                }
                                BOOMR.plugins.AutoXHR && "Payload" === m.pageGroups[t].type && BOOMR.plugins.AutoXHR.setXhrRequestResponseCapturing(!0);
                                r.push(m.pageGroups[t])
                            }
                    m.pageGroups = r
                }
                "undefined" != typeof e.autorun && (m.autorun = e.autorun);
                m.pci && BOOMR.addVar("pci", 1);
                if (m.initialized && m.configReceived)
                    return this;
                if (m.initialized) {
                    m.configReceived = !0;
                    m.initResourceGroupHandlers("init");
                    for (n = 0; n < m.beaconQueue.length; n++)
                        if (m.beaconQueue[n].needsDimensions) {
                            m.runAllDimensions(function(e, t) {
                                m.beaconQueue[n].vars[e] = t
                            });
                            delete m.beaconQueue[n].needsDimensions
                        }
                    if (m.rerunAfterConfig) {
                        m.done(m.rerunAfterConfig.edata, m.rerunAfterConfig.ename);
                        m.rerunAfterConfig = !1;
                        return
                    }
                }
                BOOMR.setImmediate(m.processBeaconQueue);
                if (!m.initialized) {
                    if (m.onloadfired)
                        m.autorun && m.done("load");
                    else {
                        BOOMR.subscribe("page_ready", m.onload, "load", m);
                        BOOMR.subscribe("page_ready", m.done, "load", m);
                        BOOMR.subscribe("prerender_to_visible", m.prerenderToVisible, "load", m);
                        BOOMR.subscribe("spa_init", m.initResourceGroupHandlers);
                        BOOMR.subscribe("xhr_init", m.initResourceGroupHandlers)
                    }
                    BOOMR.subscribe("before_unload", m.onunload, null, m);
                    BOOMR.subscribe("before_unload", m.done, "unload", m);
                    BOOMR.subscribe("beacon", m.clearMetrics, null, m);
                    BOOMR.subscribe("beacon", m.removeResolvedResourceGroupHandlers);
                    BOOMR.subscribe("xhr_load", m.done, "xhr", m);
                    BOOMR.subscribe("before_beacon", m.onBeforeBeacon, null, m);
                    BOOMR.subscribe("before_early_beacon", m.onBeforeEarlyBeacon, null, m);
                    BOOMR.plugins.AutoXHR && BOOMR.plugins.AutoXHR.addExcludeFilter(m.excludeXhrFilter, m, "BOOMR.plugins.PageParams.PageGroups");
                    m.initialized = !0
                }
                return this
            },
            is_complete: function() {
                0 < m.mayRetry.length && m.retry();
                return m.configReceived || m.unloadFired
            },
            readyToSend: function() {
                return m.configReceived || m.unloadFired
            },
            rerun: function() {
                m.done({}, "rerun")
            }
        }
    }
}();
!function() {
    var r;
    if (!BOOMR.plugins.IFrameDelay) {
        r = BOOMR.window;
        var i = {
            initialized: !1,
            registerParent: !1,
            monitoredCount: 0,
            finishedCount: 0,
            runningCount: 0,
            runningFrames: {},
            loadingIntervalID: undefined,
            loadedIntervalID: undefined,
            loadEnd: 0,
            messages: {
                start: "boomrIframeLoading",
                done: "boomrIframeLoaded",
                startACK: "boomrIframeLoadingACK",
                doneACK: "boomrIframeLoadedACK"
            },
            onIFrameMessageAsParent: function(e) {
                var t;
                if (e && e.data && "string" == typeof e.data && "{" === e.data.charAt(0) && e.source) {
                    try {
                        t = JSON.parse(e.data)
                    } catch (n) {
                        return
                    }
                    if (t.msg === i.messages.start) {
                        if (i.runningFrames[t.pid])
                            return;
                        e.source.postMessage(JSON.stringify({
                            msg: i.messages.startACK
                        }), e.origin);
                        i.runningCount += 1;
                        i.runningFrames[t.pid] = 1
                    } else if (t.msg === i.messages.done) {
                        e.source.postMessage(JSON.stringify({
                            msg: i.messages.doneACK
                        }), e.origin);
                        --i.runningCount;
                        i.finishedCount += 1;
                        t.loadEnd > i.loadEnd && (i.loadEnd = t.loadEnd);
                        i.checkCompleteness()
                    }
                }
            },
            onIFrameMessageAsChild: function(e) {
                var t;
                if (e && e.data && "string" == typeof e.data && "{" === e.data.charAt(0) && e.source) {
                    try {
                        t = JSON.parse(e.data)
                    } catch (n) {
                        return
                    }
                    if (t.msg === i.messages.startACK) {
                        clearInterval(i.loadingIntervalID);
                        i.loadingIntervalID = undefined
                    } else if (t.msg === i.messages.doneACK) {
                        clearInterval(i.loadedIntervalID);
                        i.loadedIntervalID = undefined
                    }
                }
            },
            checkCompleteness: function() {
                if (i.is_complete()) {
                    BOOMR.addVar("ifdl.done", BOOMR.now());
                    BOOMR.addVar("ifdl.ct", i.finishedCount);
                    BOOMR.addVar("ifdl.r", i.runningCount);
                    BOOMR.addVar("ifdl.mon", i.monitoredCount);
                    BOOMR.hasBrowserOnloadFired() ? BOOMR.page_ready(0 < i.loadEnd ? i.loadEnd : undefined) : BOOMR.attach_page_ready(function() {
                        BOOMR.page_ready(undefined, !0)
                    })
                }
            },
            is_complete: function() {
                return !(i.enabled && !i.registerParent) || i.finishedCount >= i.monitoredCount && 0 === i.runningCount
            }
        };
        BOOMR.plugins.IFrameDelay = {
            init: function(e) {
                BOOMR.utils.pluginConfig(i, e, "IFrameDelay", ["enabled", "registerParent", "monitoredCount"]);
                if (i.initialized)
                    return this;
                i.initialized = !0;
                if (this.is_supported())
                    if (i.registerParent) {
                        BOOMR.utils.addListener(window, "message", i.onIFrameMessageAsChild);
                        function t() {
                            r.parent.postMessage(JSON.stringify({
                                msg: i.messages.start,
                                pid: BOOMR.pageId
                            }), "*")
                        }
                        t();
                        i.loadingIntervalID = setInterval(t, 250);
                        BOOMR.subscribe("page_load_beacon", function(e) {
                            var t = e && e["rt.end"] ? e["rt.end"] : BOOMR.now();
                            function n() {
                                i.loadingIntervalID || r.parent.postMessage(JSON.stringify({
                                    msg: i.messages.done,
                                    pid: BOOMR.pageId,
                                    loadEnd: t
                                }), "*")
                            }
                            n();
                            i.loadedIntervalID = setInterval(n, 250)
                        })
                    } else if (!i.registerParent && i.monitoredCount && 0 < i.monitoredCount)
                        BOOMR.utils.addListener(r, "message", i.onIFrameMessageAsParent);
                    else {
                        i.finishedCount = i.monitoredCount = i.runningCount = 0;
                        i.enabled = !1
                    }
                else
                    i.enabled = !1;
                return this
            },
            is_complete: function() {
                return i.is_complete()
            },
            is_supported: function() {
                return BOOMR.utils.hasPostMessageSupport() && window.JSON
            }
        }
    }
}();
!function() {
    var c, s, d, O, m, f = ["uninitialized", "open", "responseStart", "domInteractive", "responseEnd"];
    if (!BOOMR.plugins.AutoXHR && (c = BOOMR.window) && c.XMLHttpRequest && (new c.XMLHttpRequest).addEventListener) {
        u.stop = function() {
            u.pause();
            u.observer = null
        }
        ;
        u.pause = function() {
            if (u.observer && u.observer.observer && !u.isPaused) {
                u.isPaused = !0;
                u.observer.observer.disconnect()
            }
        }
        ;
        u.resume = function() {
            if (u.observer && u.observer.observer && u.isPaused) {
                u.isPaused = !1;
                u.observer.observer.observe(s, u.observer.config)
            }
        }
        ;
        u.start = function() {
            if (!u.observer) {
                var e = {
                    childList: !0,
                    attributes: !0,
                    subtree: !0,
                    attributeFilter: ["src", "href"]
                };
                if (u.observer = BOOMR.utils.addObserver(s, e, null, d.mutation_cb, null, d)) {
                    u.observer.config = e;
                    BOOMR.subscribe("page_unload", u.stop, null, u)
                }
            }
        }
        ;
        u.prototype.addEvent = function(e) {
            for (var t, n, r = {
                type: e.initiator,
                resource: e,
                nodes_to_wait: 0,
                total_nodes: 0,
                resources: [],
                complete: !1,
                aborted: !1,
                firedEarlyBeacon: !1
            }, i = this.pending_events.length, o = this, a = i - 1; 0 <= a; a--)
                if (this.pending_events[a] && !this.pending_events[a].complete) {
                    t = this.pending_events[a];
                    n = a;
                    break
                }
            if (t)
                if ("click" === t.type) {
                    if (0 === t.nodes_to_wait || !t.resource.url) {
                        this.pending_events[n] = undefined;
                        this.watch--
                    }
                } else if ("xhr" === t.type) {
                    if ("click" === r.type)
                        return null;
                    if ("xhr" === r.type) {
                        d.add_event_resource(e);
                        return null
                    }
                } else if (BOOMR.utils.inArray(t.type, BOOMR.constants.BEACON_TYPE_SPAS)) {
                    if ("xhr" === r.type) {
                        d.add_event_resource(e);
                        return null
                    }
                    if (BOOMR.utils.inArray(r.type, BOOMR.constants.BEACON_TYPE_SPAS)) {
                        t.resource.timing.loadEventEnd = BOOMR.now();
                        t.aborted = !0;
                        this.sendEvent(n)
                    }
                }
            if ("click" === r.type) {
                if (!u.observer)
                    return null;
                this.setTimeout(m.xhrIdleTimeout, i)
            } else if ("xhr" === r.type) {
                r.nodes_to_wait++;
                r.total_nodes++;
                r.ignoreMO = !0
            } else if (BOOMR.utils.inArray(r.type, BOOMR.constants.BEACON_TYPE_SPAS)) {
                u.start();
                if (e.wait) {
                    r.nodes_to_wait++;
                    r.total_nodes++;
                    e.waitComplete = function() {
                        o.load_finished(i);
                        e.waitComplete = undefined
                    }
                } else
                    this.setTimeout(m.spaIdleTimeout, i)
            }
            this.watch++;
            this.pending_events.push(r);
            return e.index = i
        }
        ;
        u.prototype.sendEvent = function(e) {
            var t = this.pending_events[e]
              , n = this;
            BOOMR.now();
            if (t && !t.complete) {
                this.clearTimeout(e);
                if (BOOMR.readyToSend()) {
                    t.complete = !0;
                    this.watch--;
                    t.resource.resources = t.resources;
                    BOOMR.utils.inArray(t.type, BOOMR.constants.BEACON_TYPE_SPAS) && (t.resource.url = s.URL);
                    if ("spa" === t.type && 0 === t.total_nodes && t.resource.url === n.lastSpaLocation) {
                        BOOMR.fireEvent("spa_cancel");
                        this.pending_events[e] = undefined;
                        return
                    }
                    if (BOOMR.utils.inArray(t.type, BOOMR.constants.BEACON_TYPE_SPAS)) {
                        n.lastSpaLocation = t.resource.url;
                        if (!t.forced) {
                            "spa" === t.type && 0 === t.total_nodes && (t.resource.timing.loadEventEnd = t.resource.timing.requestStart + 1);
                            if ("spa_hard" === t.type) {
                                var r = BOOMR.getPerformance();
                                r && r.timing && r.timing.loadEventEnd && t.resource.timing.loadEventEnd && t.resource.timing.loadEventEnd < r.timing.loadEventEnd && (t.resource.timing.loadEventEnd = r.timing.loadEventEnd)
                            }
                        }
                    }
                    this.sendResource(t.resource, e)
                } else
                    setTimeout(function() {
                        n.sendEvent(e)
                    }, 500)
            }
        }
        ;
        u.prototype.sendResource = function(r, i) {
            var o = this
              , e = o.pending_events[i]
              , a = r.timing ? r.timing.requestStart : undefined
              , t = function(e, t) {
                e && (r.timing.loadEventEnd = t || BOOMR.now());
                BOOMR.real_sendBeacon();
                r.onComplete && r.onComplete(r);
                if (BOOMR.plugins.ResourceTiming && BOOMR.plugins.ResourceTiming.is_enabled() && r.timing && r.timing.requestStart) {
                    var n = BOOMR.plugins.ResourceTiming.getCompressedResourceTiming(r.timing.requestStart, r.timing.loadEventEnd);
                    BOOMR.plugins.ResourceTiming.addToBeacon(n)
                }
                if (BOOMR.utils.inArray(r.initiator, BOOMR.constants.BEACON_TYPE_SPAS)) {
                    o.calculateSpaTimings(r);
                    if ("number" == typeof i && o.pending_events[i].aborted) {
                        BOOMR.addVar("pgu", s.URL, !0);
                        BOOMR.addVar("rt.quit", "", !0);
                        BOOMR.addVar("rt.abld", "", !0)
                    }
                }
                BOOMR.responseEnd(r, a, r);
                "number" == typeof i && (o.pending_events[i] = undefined)
            };
            "spa_hard" !== r.initiator || e && e.aborted || BOOMR.hasBrowserOnloadFired() ? t(!1) : BOOMR.utils.addListener(c, "load", function() {
                var e = BOOMR.now();
                BOOMR.setImmediate(function() {
                    t(!0, e)
                })
            })
        }
        ;
        u.prototype.calculateSpaTimings = function(e) {
            var t = BOOMR.getPerformance();
            if (t && t.timing)
                if ("spa_hard" === e.initiator) {
                    e.timing.responseEnd = t.timing.responseStart;
                    e.timing.fetchStart = t.timing.navigationStart
                } else {
                    if (!BOOMR.plugins.ResourceTiming || !BOOMR.plugins.ResourceTiming.is_supported())
                        return;
                    var n = BOOMR.plugins.ResourceTiming.getFilteredResourceTiming(e.timing.requestStart, e.timing.loadEventEnd, m.spaBackEndResources).entries
                      , r = Math.round(e.timing.loadEventEnd - e.timing.requestStart);
                    if (!n || !n.length) {
                        e.timers = {
                            t_resp: 0,
                            t_page: r,
                            t_done: r
                        };
                        return
                    }
                    for (var i = e.timing.loadEventEnd - t.timing.navigationStart, o = 0; o < n.length; o++)
                        if (n[o].responseStart > i) {
                            n[o].responseStart = i;
                            n[o].responseEnd = i
                        } else
                            n[o].responseEnd > i && (n[o].responseEnd = i);
                    var a = Math.round(BOOMR.plugins.ResourceTiming.calculateResourceTimingUnion(n))
                      , s = r - a;
                    if (a < 0 || r < 0 || s < 0) {
                        BOOMR.addError("Incorrect SPA time calculation");
                        return
                    }
                    e.timers = {
                        t_resp: a,
                        t_page: s,
                        t_done: r
                    }
                }
        }
        ;
        u.prototype.setTimeout = function(e, t) {
            var n = this;
            if (e) {
                this.clearTimeout(t);
                this.timer = setTimeout(function() {
                    n.timedout(t)
                }, e)
            }
        }
        ;
        u.prototype.timedout = function(e) {
            var t;
            this.clearTimeout(e);
            if (t = this.pending_events[e]) {
                if (BOOMR.utils.inArray(t.type, BOOMR.constants.BEACON_TYPE_SPAS) && !BOOMR.hasBrowserOnloadFired()) {
                    this.setTimeout(1e3, e);
                    return
                }
                if (0 === t.nodes_to_wait) {
                    if ("click" === t.type && (0 === t.total_nodes || !t.resource.url)) {
                        this.watch--;
                        this.pending_events[e] = undefined;
                        return
                    }
                    this.sendEvent(e)
                }
            }
        }
        ;
        u.prototype.clearTimeout = function(e) {
            if (this.timer && e === this.pending_events.length - 1) {
                clearTimeout(this.timer);
                this.timer = null
            }
        }
        ;
        u.prototype.load_cb = function(e, t) {
            var n, r = BOOMR.now(), i = e.target || e.srcElement;
            if (i && i._bmr) {
                n = i._bmr.idx;
                t = void 0 !== t ? t : i._bmr.res || 0;
                if (!i._bmr.end[t]) {
                    i._bmr.end[t] = r;
                    this.load_finished(n, r)
                }
            }
        }
        ;
        u.prototype.monitorMO = function(e) {
            var t = this.pending_events[e];
            t && delete t.ignoreMO
        }
        ;
        u.prototype.load_finished = function(e, t) {
            var n = this.pending_events[e];
            if (n) {
                n.nodes_to_wait--;
                if (0 === n.nodes_to_wait) {
                    n.resource.timing.loadEventEnd = t || BOOMR.now();
                    if (e === this.pending_events.length - 1)
                        if (BOOMR.utils.inArray(n.type, BOOMR.constants.BEACON_TYPE_SPAS)) {
                            if (!n.firedEarlyBeacon && BOOMR.plugins.Early && BOOMR.plugins.Early.is_supported()) {
                                if (this.timerEarlyBeacon) {
                                    clearTimeout(this.timerEarlyBeacon);
                                    this.timerEarlyBeacon = null
                                }
                                this.timerEarlyBeacon = setTimeout(function() {
                                    d.timerEarlyBeacon = null;
                                    if (!n.firedEarlyBeacon && 0 === n.nodes_to_wait) {
                                        n.firedEarlyBeacon = !0;
                                        BOOMR.plugins.Early.sendEarlyBeacon(n.resource, n.type)
                                    }
                                }, 100)
                            }
                            this.setTimeout(m.spaIdleTimeout, e)
                        } else
                            this.setTimeout(m.xhrIdleTimeout, e);
                    else
                        this.sendEvent(e)
                }
            }
        }
        ;
        u.prototype.wait_for_node = function(t, n) {
            var e, r, i, o, a, s, u, l, c, d = this, f = !1, p = !1;
            if (t && t.nodeName && (t.nodeName.toUpperCase().match(/^(IMG|IFRAME|IMAGE)$/) || "LINK" === t.nodeName.toUpperCase() && t.rel && t.rel.match(/\bstylesheet\b/i))) {
                t._bmr && "number" == typeof t._bmr.res && t._bmr.end[t._bmr.res] && (p = !0);
                a = t.src || "function" == typeof t.getAttribute && t.getAttribute("xlink:href") || t.href;
                t._bmr && t._bmr.url !== a && (p = !0);
                if (p && "function" == typeof t._bmr.listener) {
                    d.load_cb({
                        target: t,
                        type: "changed"
                    });
                    t.removeEventListener("load", t._bmr.listener);
                    t.removeEventListener("error", t._bmr.listener);
                    delete t._bmr.listener
                }
                if (!a || a.match(/^(about:|javascript:|data:)/i))
                    return !1;
                if ("IMG" === t.nodeName) {
                    if (t.naturalWidth && !p)
                        return !1;
                    if ("function" == typeof t.getAttribute && "" === t.getAttribute("src"))
                        return !1
                }
                if ("IFRAME" === t.nodeName && p)
                    return !1;
                if ("function" == typeof t.getAttribute) {
                    u = parseInt(t.getAttribute("height"), 10);
                    l = parseInt(t.getAttribute("width"), 10)
                }
                isNaN(u) && (u = !t.style || "0" !== t.style.height && "0px" !== t.style.height && "1px" !== t.style.height ? undefined : 0);
                isNaN(l) && (l = !t.style || "0" !== t.style.width && "0px" !== t.style.width && "1px" !== t.style.width ? undefined : 0);
                if (!isNaN(u) && u <= 1 && !isNaN(l) && l <= 1)
                    return !1;
                if (t.style && "none" === t.style.display)
                    return !1;
                if (t.style && "hidden" === t.style.visibility)
                    return !1;
                if (!(e = this.pending_events[n]))
                    return !1;
                s = e.resources.length;
                e.urls || (e.urls = {});
                if (e.urls[a])
                    return !1;
                if (!e.resource.url) {
                    O.href = a;
                    if (m.excludeFilter(O))
                        return !1;
                    e.resource.url = O.href
                }
                t._bmr || (t._bmr = {
                    end: {}
                });
                t._bmr.res = s;
                t._bmr.idx = n;
                delete t._bmr.end[s];
                t._bmr.url = a;
                c = function(e) {
                    d.load_cb(e, s);
                    t.removeEventListener("load", c);
                    t.removeEventListener("error", c);
                    delete t._bmr.listener
                }
                ;
                t._bmr.listener = c;
                t.addEventListener("load", c);
                t.addEventListener("error", c);
                e.nodes_to_wait++;
                this.clearTimeout(n);
                e.total_nodes++;
                e.resources.push(t);
                e.urls[a] = 1;
                f = !0
            } else
                t.nodeType === Node.ELEMENT_NODE && ["IMAGE", "IMG"].forEach(function(e) {
                    if ((r = t.getElementsByTagName(e)) && r.length)
                        for (i = 0,
                        o = r.length; i < o; i++)
                            f |= this.wait_for_node(r[i], n)
                }, this);
            return f
        }
        ;
        u.prototype.add_event_resource = function(e) {
            var t, n = this.pending_events.length - 1;
            if (n < 0)
                return -1;
            if (!(t = this.pending_events[n]))
                return -1;
            if (!e)
                return -1;
            t.nodes_to_wait++;
            t.total_nodes++;
            e.index = n;
            e.node = !0;
            return n
        }
        ;
        u.prototype.mutation_cb = function(e) {
            var i, o, a;
            if (!this.watch)
                return !0;
            if ((o = (i = this).pending_events.length - 1) < 0 || !this.pending_events[o])
                return !0;
            if ((a = this.pending_events[o]).ignoreMO)
                return !0;
            "undefined" == typeof a.interesting && (a.interesting = !1);
            if (e && e.length) {
                a.resource.timing.domComplete = BOOMR.now();
                e.forEach(function(e) {
                    var t, n, r;
                    if ("attributes" === e.type)
                        a.interesting |= i.wait_for_node(e.target, o);
                    else if ("childList" === e.type) {
                        n = e.addedNodes.length;
                        for (t = 0; t < n; t++)
                            a.interesting |= i.wait_for_node(e.addedNodes[t], o);
                        n = e.removedNodes.length;
                        for (t = 0; t < n; t++)
                            "IFRAME" === (r = e.removedNodes[t]).nodeName && r._bmr && i.load_cb({
                                target: r,
                                type: "removed"
                            })
                    }
                })
            }
            if (!a.interesting && !a.timeoutExtended) {
                this.setTimeout(1e3, o);
                a.timeoutExtended = !0
            }
            return !0
        }
        ;
        u.prototype.queue_is_empty = function() {
            return 0 === this.nodesWaitingFor()
        }
        ;
        u.prototype.nodesWaitingFor = function(e) {
            var t;
            if (0 === this.pending_events.length)
                return 0;
            void 0 === e && (e = this.pending_events.length - 1);
            return (t = this.pending_events[e]) ? t.nodes_to_wait : 0
        }
        ;
        u.prototype.completeEvent = function(e) {
            var t, n = BOOMR.now();
            if (0 !== this.pending_events.length) {
                void 0 === e && (e = this.pending_events.length - 1);
                if (t = this.pending_events[e]) {
                    t.resource.timing.loadEventEnd = n;
                    t.forced = !0;
                    this.sendEvent(e)
                }
            }
        }
        ;
        d = new u;
        m = {
            spaBackEndResources: ["xmlhttprequest", "script", "fetch"],
            alwaysSendXhr: !1,
            excludeFilters: [],
            initialized: !1,
            captureXhrRequestResponse: !1,
            singlePageApp: !1,
            autoXhrEnabled: !1,
            monitorFetch: !1,
            fetchBodyUsedWait: 200,
            spaIdleTimeout: 1e3,
            xhrIdleTimeout: 50,
            excludeFilter: function(e) {
                var t, n;
                if (!e || !e.href)
                    return !1;
                for (t = 0; t < m.excludeFilters.length; t++)
                    if ("function" == typeof m.excludeFilters[t].cb) {
                        n = m.excludeFilters[t].ctx;
                        m.excludeFilters[t].name;
                        try {
                            if (m.excludeFilters[t].cb.call(n, e))
                                return !0
                        } catch (r) {
                            BOOMR.addError(r, "BOOMR.plugins.AutoXHR.impl.excludeFilter()")
                        }
                    }
                return !1
            },
            loadFinished: function(t, e) {
                var n, r, i, o, a;
                e = e || BOOMR.now();
                if (!t.timing.loadEventEnd) {
                    t.status && BOOMR.fireEvent("xhr_error", t);
                    t.timing.loadEventEnd = e;
                    if ((a = BOOMR.getPerformance()) && a.timing) {
                        r = a.timing.navigationStart;
                        if (n = BOOMR.getResourceTiming(t.url, function(e, t) {
                            return e.responseEnd - t.responseEnd
                        }, function(e) {
                            return Math.ceil(r + e.startTime + 2) >= t.timing.requestStart && 0 !== e.responseEnd
                        })) {
                            i = Math.floor(r + n.startTime);
                            if ((o = Math.floor(r + n.responseEnd)) <= BOOMR.now()) {
                                t.timing.responseEnd = o;
                                t.timing.loadEventEnd < o && (t.timing.loadEventEnd = o);
                                t.timing.requestStart = i;
                                t.timing.fetchStart = i;
                                0 !== n.responseStart && (t.timing.responseStart = Math.floor(r + n.responseStart));
                                t.restiming = n
                            }
                        }
                    }
                    t.node && function s(e, t) {
                        var n, r;
                        if (t && e) {
                            if ("boolean" == typeof t)
                                return !0 === t;
                            if ("function" == typeof t)
                                try {
                                    return !0 === t(e)
                                } catch (i) {
                                    return
                                }
                            if (BOOMR.utils.isArray(t))
                                for (n = 0; n < t.length; n++) {
                                    if ("string" == typeof (r = t[n]) && r === e)
                                        return 1;
                                    if (r instanceof RegExp && r.test(e))
                                        return 1
                                }
                        }
                    }(t.url, m.alwaysSendXhr) && d.sendResource(t);
                    if (0 <= t.index) {
                        d.monitorMO(t.index);
                        d.load_finished(t.index, t.timing.responseEnd)
                    }
                }
            }
        };
        BOOMR.plugins.AutoXHR = {
            is_complete: function() {
                return !0
            },
            init: function(e) {
                var t, n;
                s = c.document;
                if (c && s) {
                    O = s.createElement("A");
                    BOOMR.utils.pluginConfig(m, e, "AutoXHR", ["spaBackEndResources", "alwaysSendXhr", "monitorFetch", "fetchBodyUsedWait", "spaIdleTimeout", "xhrIdleTimeout"]);
                    BOOMR.instrumentXHR = p;
                    BOOMR.uninstrumentXHR = h;
                    BOOMR.instrumentFetch = a;
                    BOOMR.uninstrumentFetch = l;
                    if (!m.initialized) {
                        this.addExcludeFilter(o, null, "shouldExcludeXhr");
                        m.initialized = !0
                    }
                    if (e && e.AutoXHR && e.AutoXHR.excludeFilters && 0 < e.AutoXHR.excludeFilters.length)
                        for (n = 0; n < e.AutoXHR.excludeFilters.length; n++)
                            m.excludeFilters.push(e.AutoXHR.excludeFilters[n]);
                    m.autoXhrEnabled = e.instrument_xhr;
                    m.singlePageApp = BOOMR.plugins.SPA && BOOMR.plugins.SPA.isSinglePageApp(e);
                    if (m.alwaysSendXhr && m.autoXhrEnabled && BOOMR.xhr && "function" == typeof BOOMR.xhr.stop) {
                        function r(e) {
                            if (e.length)
                                for (t = 0; t < e.length; t++)
                                    g(e[t]);
                            else
                                g(e)
                        }
                        var i = BOOMR.xhr.stop(r);
                        i && i.length && BOOMR.setImmediate(r, i)
                    }
                    if (m.singlePageApp) {
                        m.alwaysSendXhr || (m.autoXhrEnabled = !1);
                        if (m.autoXhrEnabled) {
                            BOOMR.instrumentXHR();
                            BOOMR.instrumentFetch()
                        }
                    } else if (m.autoXhrEnabled) {
                        BOOMR.instrumentXHR();
                        BOOMR.instrumentFetch()
                    } else if (!1 === m.autoXhrEnabled) {
                        BOOMR.uninstrumentXHR();
                        BOOMR.uninstrumentFetch()
                    }
                    BOOMR.registerEvent("xhr_error")
                }
            },
            getMutationHandler: function() {
                return d
            },
            getPathname: n,
            enableAutoXhr: function() {
                if (!m.autoXhrEnabled) {
                    BOOMR.instrumentXHR();
                    BOOMR.instrumentFetch()
                }
                m.autoXhrEnabled = !0
            },
            addExcludeFilter: function(e, t, n) {
                m.excludeFilters.push({
                    cb: e,
                    ctx: t,
                    name: n
                })
            },
            setXhrRequestResponseCapturing: function(e) {
                m.captureXhrRequestResponse = e
            }
        }
    }
    function n(e) {
        if (!e)
            return null;
        e.href;
        var t = e.pathname;
        "/" !== t.charAt(0) && (t = "/" + t);
        return t
    }
    function o(e) {
        var t;
        if (e.href) {
            if (e.href.match(/^(about:|javascript:|data:)/i))
                return !0;
            if ("function" == typeof BOOMR.getBeaconURL && BOOMR.getBeaconURL() && (0 === (t = e.href.indexOf(BOOMR.getBeaconURL())) || 5 === t || 6 === t))
                return !0
        }
        return BOOMR.xhr_excludes.hasOwnProperty(e.href) || BOOMR.xhr_excludes.hasOwnProperty(e.hostname) || BOOMR.xhr_excludes.hasOwnProperty(n(e))
    }
    function u() {
        this.watch = 0;
        this.timer = null;
        this.timerEarlyBeacon = null;
        this.pending_events = [];
        this.lastSpaLocation = null
    }
    function a() {
        if (m.monitorFetch && "function" == typeof c.fetch && "function" == typeof c.Request && "function" == typeof c.Response && "function" == typeof c.Promise && "function" == typeof window.fetch && !c.fetch.polyfill && (!BOOMR.proxy_fetch || BOOMR.proxy_fetch !== c.fetch))
            if (BOOMR.proxy_fetch && BOOMR.orig_fetch && BOOMR.orig_fetch === c.fetch)
                c.fetch = BOOMR.proxy_fetch;
            else {
                BOOMR.orig_fetch = c.orig_fetch || c.fetch;
                BOOMR.proxy_fetch = function(e, t) {
                    var n, r, i, o = {
                        timing: {},
                        initiator: "xhr"
                    };
                    if ("object" == typeof e && e instanceof c.Request) {
                        n = e.url;
                        r = t && t.method || e.method || "GET";
                        m.captureXhrRequestResponse && (i = t && t.body || e.body || undefined)
                    } else {
                        n = e;
                        r = t && t.method || "GET";
                        m.captureXhrRequestResponse && (i = t && t.body || undefined)
                    }
                    O.href = n;
                    if (m.excludeFilter(O))
                        return BOOMR.orig_fetch.apply(c, arguments);
                    BOOMR.fireEvent("xhr_init", "fetch");
                    o.url = O.href;
                    o.method = r;
                    o.type = "fetch";
                    i && (o.requestPayload = i);
                    BOOMR.fireEvent("xhr_send", {
                        resource: o
                    });
                    d.addEvent(o);
                    try {
                        o.timing.requestStart = BOOMR.now();
                        var a = BOOMR.orig_fetch.apply(this, arguments);
                        function s(r, i, o) {
                            function a() {
                                var e;
                                if (o.fetchResponse && !o.fetchResponse.bodyUsed && m.fetchBodyUsedWait) {
                                    e = BOOMR.now();
                                    o.responseBodyNotUsed = !0;
                                    setTimeout(function() {
                                        m.loadFinished(o, e)
                                    }, m.fetchBodyUsedWait)
                                } else
                                    m.loadFinished(o)
                            }
                            return function() {
                                var e, t = r._bmrNextP;
                                try {
                                    e = i.apply(this === window ? c : this, arguments);
                                    for (; t && !t._bmrHasOnFulfilled; )
                                        t = t._bmrNextP;
                                    t || (e instanceof c.Promise ? e.then = u(e, e.then, o) : a());
                                    return e
                                } catch (n) {
                                    for (; t && !t._bmrHasOnRejected; )
                                        t = t._bmrNextP;
                                    t || a();
                                    throw n
                                }
                            }
                        }
                        function u(n, r, i) {
                            return n._bmrNextP ? r : function() {
                                var e = Array.prototype.slice.call(arguments);
                                if (0 < e.length) {
                                    if ("function" == typeof e[0]) {
                                        e[0] = s(n, e[0], i);
                                        n._bmrHasOnFulfilled = !0
                                    }
                                    if (1 < e.length && "function" == typeof e[1]) {
                                        e[1] = s(n, e[1], i);
                                        n._bmrHasOnRejected = !0
                                    }
                                }
                                var t = r.apply(n, e);
                                (n._bmrNextP = t).then = u(t, t.then, i);
                                return t
                            }
                        }
                        a.then = u(a, a.then, o);
                        return a.then(function(e) {
                            var t, n = !1, r = !1;
                            (e.status < 200 || 400 <= e.status) && (o.status = e.status);
                            o.fetchResponse = e;
                            0 <= o.index && d.monitorMO(o.index);
                            if (m.captureXhrRequestResponse && "function" == typeof e.clone) {
                                if (t = e.headers.get("content-type")) {
                                    n = -1 !== t.indexOf("json");
                                    r = -1 !== t.indexOf("xml")
                                }
                                o.response = {};
                                try {
                                    e.clone().text().then(function(e) {
                                        o.response.text = e;
                                        o.response.raw = e;
                                        r && "function" == typeof c.DOMParser && (o.response.xml = (new c.DOMParser).parseFromString(e, "text/xml"))
                                    }).then(null, function(e) {})
                                } catch (i) {}
                                if (n)
                                    try {
                                        e.clone().json().then(function(e) {
                                            o.response.json = e
                                        }).then(null, function(e) {})
                                    } catch (i) {}
                            }
                            return e
                        }, function(e) {
                            !e || "AbortError" !== e.name && 20 !== e.code ? o.status = -998 : o.status = -999;
                            throw e
                        })
                    } catch (l) {
                        o.status = -997;
                        m.loadFinished(o);
                        throw l
                    }
                }
                ;
                BOOMR.utils.overwriteNative(c, "fetch", BOOMR.proxy_fetch)
            }
    }
    function l() {
        "function" == typeof c.fetch && BOOMR.orig_fetch && BOOMR.orig_fetch !== c.fetch && (c.fetch = BOOMR.orig_fetch)
    }
    function p() {
        if (!BOOMR.proxy_XMLHttpRequest || BOOMR.proxy_XMLHttpRequest !== c.XMLHttpRequest)
            if (BOOMR.proxy_XMLHttpRequest && BOOMR.orig_XMLHttpRequest && BOOMR.orig_XMLHttpRequest === c.XMLHttpRequest) {
                c.XMLHttpRequest = BOOMR.proxy_XMLHttpRequest;
                u.start()
            } else {
                BOOMR.orig_XMLHttpRequest = c.orig_XMLHttpRequest || c.XMLHttpRequest;
                u.start();
                !function e() {
                    BOOMR.subscribe("click", function() {
                        if (!m.singlePageApp) {
                            var e = {
                                timing: {},
                                initiator: "click"
                            };
                            if (BOOMR.orig_XMLHttpRequest && BOOMR.orig_XMLHttpRequest !== c.XMLHttpRequest) {
                                e.timing.requestStart = BOOMR.now();
                                d.addEvent(e)
                            }
                        }
                    })
                }();
                BOOMR.proxy_XMLHttpRequest = function() {
                    var o = {
                        timing: {},
                        initiator: "xhr"
                    }
                      , a = !1
                      , s = !1
                      , u = new BOOMR.orig_XMLHttpRequest
                      , l = u.open
                      , t = u.send;
                    u.open = function(e, t, n) {
                        O.href = t;
                        if (m.excludeFilter(O)) {
                            s = !0;
                            return l.apply(u, arguments)
                        }
                        s = !1;
                        void 0 === n && (n = !0);
                        BOOMR.fireEvent("xhr_init", "xhr");
                        function r(t, n) {
                            u.addEventListener(t, function() {
                                if ("readystatechange" === t) {
                                    o.timing[f[u.readyState]] = BOOMR.now();
                                    if (4 === u.readyState && 0 !== u.status) {
                                        (u.status < 200 || 400 <= u.status) && (o.status = u.status);
                                        if (m.captureXhrRequestResponse) {
                                            o.response = {
                                                text: "" === u.responseType || "text" === u.responseType ? u.responseText : null,
                                                xml: "" === u.responseType || "document" === u.responseType ? u.responseXML : null,
                                                raw: u.response,
                                                json: u.responseJSON
                                            };
                                            if (u.response && u.response.constructor && u.response.constructor === BOOMR.boomerang_frame.Object && BOOMR.boomerang_frame.Object !== c.Object)
                                                try {
                                                    u.response.constructor = c.Object
                                                } catch (e) {}
                                        }
                                        m.loadFinished(o)
                                    } else if (0 === u.readyState && "number" == typeof o.timing.open) {
                                        o.status = -999;
                                        m.loadFinished(o)
                                    }
                                } else {
                                    "load" === t ? 0 !== u.status && (u.status < 200 || 400 <= u.status) && (o.status = u.status) : o.status = void 0 === n ? u.status : n;
                                    m.loadFinished(o)
                                }
                            }, !1)
                        }
                        if (!a) {
                            n && r("readystatechange");
                            r("load");
                            r("timeout", -1001);
                            r("error", -998);
                            r("abort", -999)
                        }
                        o.url = O.href;
                        o.method = e;
                        o.type = "xhr";
                        delete o.status;
                        n || (o.synchronous = !0);
                        a = !0;
                        try {
                            return l.apply(u, arguments)
                        } catch (i) {
                            o.status = -997;
                            m.loadFinished(o);
                            throw i
                        }
                    }
                    ;
                    u.send = function(e) {
                        if (s)
                            return t.apply(u, arguments);
                        m.captureXhrRequestResponse && (u.resource.requestPayload = e);
                        BOOMR.fireEvent("xhr_send", u);
                        d.addEvent(o);
                        o.timing.requestStart = BOOMR.now();
                        return "undefined" == typeof o.status || -997 !== o.status ? t.apply(u, arguments) : void 0
                    }
                    ;
                    u.resource = o;
                    return u
                }
                ;
                BOOMR.proxy_XMLHttpRequest.UNSENT = 0;
                BOOMR.proxy_XMLHttpRequest.OPENED = 1;
                BOOMR.proxy_XMLHttpRequest.HEADERS_RECEIVED = 2;
                BOOMR.proxy_XMLHttpRequest.LOADING = 3;
                BOOMR.proxy_XMLHttpRequest.DONE = 4;
                BOOMR.proxy_XMLHttpRequest.prototype = BOOMR.orig_XMLHttpRequest.prototype;
                BOOMR.utils.overwriteNative(c, "XMLHttpRequest", BOOMR.proxy_XMLHttpRequest)
            }
    }
    function h() {
        BOOMR.orig_XMLHttpRequest && BOOMR.orig_XMLHttpRequest !== c.XMLHttpRequest && (c.XMLHttpRequest = BOOMR.orig_XMLHttpRequest)
    }
    function g(e) {
        e.initiator = "xhr";
        BOOMR.responseEnd(e)
    }
}();
!function() {
    var l, n = !1, t = !1, c = !1, d = !1, f = !1, p = !0, O = !1, m = !1, h = !1, r = [], o = !1;
    if (!BOOMR.plugins.SPA && BOOMR.plugins.AutoXHR) {
        var a = {
            spaHardMissedOnComplete: function(e) {
                var t, n = BOOMR.plugins.RT && BOOMR.plugins.RT.navigationStart();
                o = !1;
                BOOMR.addVar("spa.missed", "1", !0);
                BOOMR.plugins.RT && BOOMR.plugins.RT.clearTimer("t_done");
                e.timing.requestStart = n;
                0 === e.resources.length && (t = BOOMR.getPerformance()) && t.timing && t.timing.navigationStart && t.timing.loadEventEnd && (e.timing.loadEventEnd = t.timing.loadEventEnd)
            },
            pageReady: function() {
                d = !0
            }
        };
        BOOMR.plugins.SPA = {
            is_complete: function() {
                return !o
            },
            init: function(e) {
                if (e && e.instrument_xhr) {
                    f = e.instrument_xhr;
                    c && f && BOOMR.plugins.AutoXHR.enableAutoXhr()
                }
                if (!t) {
                    t = !0;
                    BOOMR.subscribe("page_ready", a.pageReady, null, a)
                }
            },
            register: function(e) {
                r.push(e)
            },
            supported_frameworks: function() {
                return r
            },
            onLoadSpaHardMissed: function() {
                if (!c) {
                    d = !0;
                    f && BOOMR.plugins.AutoXHR.enableAutoXhr();
                    o = !0;
                    h ? o = !1 : BOOMR.plugins.SPA.route_change(a.spaHardMissedOnComplete)
                }
            },
            hook: function(e, t) {
                "function" == typeof (t = t || {}).routeFilter && (O = t.routeFilter);
                "function" == typeof t.routeChangeWaitFilter && (m = t.routeChangeWaitFilter);
                t.disableHardNav && (h = t.disableHardNav);
                if (n)
                    return this;
                e && BOOMR.attach_page_ready(this.onLoadSpaHardMissed);
                n = !0;
                return this
            },
            route_change: function(t, e) {
                var n = !1
                  , r = p && !h ? "spa_hard" : "spa";
                if (!l || !l.wait) {
                    if ("spa" == r && O)
                        try {
                            if (!O.apply(null, e))
                                return
                        } catch (u) {
                            BOOMR.addError(u, "SPA.route_change.routeFilter")
                        }
                    c = !0;
                    var i = BOOMR.plugins.RT && BOOMR.plugins.RT.navigationStart()
                      , o = d ? BOOMR.now() : i
                      , a = BOOMR.window.document.URL;
                    BOOMR.fireEvent("spa_init", [BOOMR.plugins.SPA.current_spa_nav(), a]);
                    var s = {
                        timing: {
                            requestStart: o
                        },
                        initiator: r,
                        url: a
                    };
                    p = !1;
                    if (!d || "function" == typeof t) {
                        d = !0;
                        s.onComplete = function(e) {
                            if (!n) {
                                n = !0;
                                BOOMR.fireEvent("spa_navigation")
                            }
                            "function" == typeof t && t(e)
                        }
                    }
                    if ("spa" == r && m)
                        try {
                            if (m.apply(null, arguments)) {
                                s.wait = !0;
                                l = s
                            }
                        } catch (u) {
                            BOOMR.addError(u, "SPA.route_change.routeChangeWaitFilter")
                        }
                    s.index = BOOMR.plugins.AutoXHR.getMutationHandler().addEvent(s);
                    f && BOOMR.plugins.AutoXHR.enableAutoXhr()
                }
            },
            last_location: function(e) {
                lastLocationChange = e
            },
            current_spa_nav: function() {
                return d ? "spa" : "spa_hard"
            },
            wait_complete: function() {
                if (l) {
                    l.wait = !1;
                    l.waitComplete && l.waitComplete();
                    l = null
                }
            },
            markNavigationComplete: function() {
                var e, t, n = BOOMR.plugins.AutoXHR.getMutationHandler();
                l && l.wait && BOOMR.plugins.SPA.wait_complete();
                if (n && 0 < n.pending_events.length)
                    for (e = n.pending_events.length - 1; 0 <= e; e--)
                        if ((t = n.pending_events[e]) && BOOMR.utils.inArray(t.type, BOOMR.constants.BEACON_TYPE_SPAS)) {
                            if (t.complete)
                                break;
                            n.nodesWaitingFor(e);
                            BOOMR.addVar("spa.forced", "1", !0);
                            BOOMR.addVar("spa.waiting", n.nodesWaitingFor(), !0);
                            n.completeEvent(e);
                            return
                        }
            },
            isSpaNavInProgress: function() {
                var e, t, n = BOOMR.plugins.AutoXHR.getMutationHandler();
                if (n && 0 < n.pending_events.length)
                    for (e = n.pending_events.length - 1; 0 <= e; e--)
                        if ((t = n.pending_events[e]) && BOOMR.utils.inArray(t.type, BOOMR.constants.BEACON_TYPE_SPAS))
                            return !t.complete;
                return !1
            },
            isSinglePageApp: function(e) {
                var t = !1
                  , n = this.supported_frameworks();
                for (i = 0; i < n.length; i++) {
                    var r = n[i];
                    if (e[r] && e[r].enabled) {
                        t = !0;
                        break
                    }
                }
                return t
            }
        };
        BOOMR.plugins.SPA.waitComplete = BOOMR.plugins.SPA.wait_complete
    }
}();
!function() {
    var s = {
        monitorHistory: !0,
        enabled: !0,
        hooked: !1,
        routeChangeInProgress: !1,
        disableHardNav: !1,
        routeFilter: undefined,
        routeChangeWaitFilter: undefined,
        monitorReplaceState: !0,
        a: undefined,
        browserOnloadBeforeSetup: !1,
        DEPRECATED_PLUGINS: ["Angular", "Backbone", "Ember"],
        resetRouteChangeInProgress: function(e) {
            if (!e || !("undefined" != typeof e.early || e["http.initiator"] && 0 === e["http.initiator"].indexOf("api_custom_"))) {
                s.routeChangeInProgress && clearTimeout(s.routeChangeInProgress);
                s.routeChangeInProgress = !1
            }
        },
        setRouteChangeInProgress: function() {
            s.routeChangeInProgress && clearTimeout(s.routeChangeInProgress);
            s.routeChangeInProgress = setTimeout(s.resetRouteChangeInProgress, 50)
        },
        routeChange: function(e) {
            if (s.enabled) {
                if (s.disableHardNav && !BOOMR.onloadFired())
                    return;
                if (!s.routeChangeInProgress) {
                    if (e.toUrl) {
                        s.a.href = e.toUrl;
                        e.toUrl = s.a.href
                    }
                    BOOMR.plugins.SPA.route_change(null, [e.type, e.fromUrl, e.toUrl])
                }
            } else
                s.resetRouteChangeInProgress()
        }
    };
    if (!BOOMR.plugins.History && "undefined" != typeof BOOMR.plugins.SPA && "undefined" != typeof BOOMR.plugins.AutoXHR && BOOMR.window && BOOMR.window.document) {
        BOOMR.plugins.SPA.register("History");
        s.a = BOOMR.window.document.createElement("A");
        BOOMR.plugins.History = {
            is_complete: function() {
                return !0
            },
            hook: function(e, t, n) {
                (n = n || {}).disableHardNav = s.disableHardNav;
                s.routeFilter && (n.routeFilter = s.routeFilter);
                s.routeChangeWaitFilter && (n.routeChangeWaitFilter = s.routeChangeWaitFilter);
                !s.hooked && s.monitorHistory && r();
                t = s.browserOnloadBeforeSetup;
                BOOMR.plugins.SPA.hook(t, n);
                if (!s.hooked && !s.browserOnloadBeforeSetup && (!s.disableHardNav || BOOMR.onloadFired())) {
                    BOOMR.plugins.SPA.route_change();
                    s.setRouteChangeInProgress()
                }
                s.hooked = !0;
                return this
            },
            init: function(e) {
                BOOMR.utils.pluginConfig(s, e, "History", ["enabled", "monitorHistory", "disableHardNav", "routeFilter", "routeChangeWaitFilter", "monitorReplaceState"]);
                s.enabled && this.hook();
                return this
            },
            disable: function() {
                s.enabled = !1;
                return this
            },
            enable: function() {
                s.enabled = !0;
                return this
            }
        };
        for (var e = 0; e < s.DEPRECATED_PLUGINS.length; e++) {
            var t = s.DEPRECATED_PLUGINS[e];
            BOOMR.plugins[t] = BOOMR.plugins.History;
            BOOMR.plugins[t] = {
                init: function(t) {
                    return function(e) {
                        BOOMR.utils.pluginConfig(s, e, t, ["enabled"]);
                        s.enabled && BOOMR.plugins.History.hook(undefined, undefined, {});
                        return BOOMR.plugins[t]
                    }
                }(t),
                enable: BOOMR.plugins.History.enable,
                hook: BOOMR.plugins.History.hook,
                is_complete: BOOMR.plugins.History.is_complete
            };
            BOOMR.plugins.SPA.register(t)
        }
    }
    function r() {
        var r, o, t, e, n, i = BOOMR.window.history;
        "function" == typeof i.pushState && (i.pushState = (r = i.pushState,
        function(e, t, n) {
            s.routeChange({
                type: "pushState",
                fromUrl: BOOMR.window.document.URL,
                toUrl: n
            });
            return r.apply(this, arguments)
        }
        ));
        s.monitorReplaceState && "function" == typeof i.replaceState && (i.replaceState = (o = i.replaceState,
        function(e, t, n) {
            var r = BOOMR.window.document.URL
              , i = r;
            if (3 <= arguments.length && null != n) {
                s.a.href = n;
                i = s.a.href
            }
            BOOMR.plugins.SPA.isSpaNavInProgress() && i === r || s.routeChange({
                type: "pushState",
                fromUrl: BOOMR.window.document.URL,
                toUrl: n
            });
            return o.apply(this, arguments)
        }
        ));
        "function" == typeof i.go && (i.go = (t = i.go,
        function(e) {
            s.routeChange({
                type: "go",
                fromUrl: BOOMR.window.document.URL
            });
            return t.apply(this, arguments)
        }
        ));
        "function" == typeof i.back && (i.back = (e = i.back,
        function() {
            s.routeChange({
                type: "back",
                fromUrl: BOOMR.window.document.URL
            });
            return e.apply(this, arguments)
        }
        ));
        "function" == typeof i.forward && (i.forward = (n = i.forward,
        function() {
            s.routeChange({
                type: "forward",
                fromUrl: BOOMR.window.document.URL
            });
            return n.apply(this, arguments)
        }
        ));
        BOOMR.window.addEventListener("hashchange", function(e) {
            var t = (e || {}).newURL;
            s.routeChange({
                type: "hashchange",
                toUrl: t
            })
        });
        function a() {
            BOOMR.window.addEventListener("popstate", function(e) {
                s.routeChange({
                    type: "popstate",
                    toUrl: BOOMR.window.document.URL
                })
            })
        }
        BOOMR.hasBrowserOnloadFired() ? a() : BOOMR.window.addEventListener("load", function() {
            setTimeout(a, 0)
        });
        BOOMR.subscribe("beacon", s.resetRouteChangeInProgress);
        BOOMR.subscribe("spa_cancel", s.resetRouteChangeInProgress);
        BOOMR.subscribe("spa_init", s.setRouteChangeInProgress);
        s.browserOnloadBeforeSetup = BOOMR.hasBrowserOnloadFired();
        return 1
    }
}();
function mmmmain (n) {
    var r, a;
    if (!BOOMR.plugins.RT) {
        a = {
            onloadfired: !1,
            unloadfired: !1,
            visiblefired: !1,
            initialized: !1,
            complete: !1,
            autorun: !0,
            timers: {},
            cookie: "RT",
            cookie_exp: 604800,
            session_exp: 1800,
            strict_referrer: !0,
            navigationType: 0,
            navigationStart: undefined,
            responseStart: undefined,
            loadTime: 0,
            oboError: 0,
            t_start: undefined,
            cached_t_start: undefined,
            cached_xhr_start: undefined,
            t_fb_approx: undefined,
            r: undefined,
            beacon_url: undefined,
            next_beacon_url: undefined,
            basic_timers: {
                t_done: 1,
                t_resp: 1,
                t_page: 1
            },
            crossdomain_sending: !1,
            navigationStartSource: "",
            updateCookie: function(e, t) {
                var n, r, i, o;
                if (!this.cookie)
                    return !1;
                i = BOOMR.utils.getSubCookies(BOOMR.utils.getCookie(this.cookie)) || {};
                for (o in i)
                    i.hasOwnProperty(o) && (isNaN(parseInt(o, 10)) || delete i[o]);
                if ("object" == typeof e)
                    for (o in e)
                        e.hasOwnProperty(o) && (e[o] === undefined ? i.hasOwnProperty(o) && delete i[o] : i[o] = e[o]);
                i.z = 1;
                i.dm = BOOMR.session.domain;
                i.si = BOOMR.session.ID;
                i.ss = BOOMR.session.start.toString(36);
                i.sl = BOOMR.session.length.toString(36);
                1800 !== a.session_exp && (i.se = a.session_exp.toString(36));
                BOOMR.session.rate_limited && (i.rl = 1);
                i.tt = this.loadTime.toString(36);
                0 < this.oboError ? i.obo = this.oboError.toString(36) : delete i.obo;
                r = BOOMR.now();
                if (t) {
                    i[t] = (r - BOOMR.session.start).toString(36);
                    a.lastActionTime = r
                }
                this.beacon_url && (i.bcn = this.beacon_url);
                console.log(e, "i", i)
                if (!BOOMR.utils.setCookie(this.cookie, i, this.cookie_exp)) {
                    BOOMR.error("cannot set start cookie", "rt");
                    return !1
                }
                if (50 < (n = BOOMR.now()) - r) {
                    BOOMR.utils.removeCookie(this.cookie);
                    BOOMR.error("took more than 50ms to set cookie... aborting: " + r + " -> " + n, "rt")
                }
                return !0
            },
            refreshSession: function(e) {
                if (e = e || BOOMR.plugins.RT.getCookie()) {
                    e.ss ? BOOMR.session.start = e.ss : BOOMR.session.start = BOOMR.plugins.RT.navigationStart() || BOOMR.t_lstart || BOOMR.t_start;
                    e.si && e.si.match(/-/) && (BOOMR.session.ID = e.si);
                    e.sl && (BOOMR.session.length = e.sl);
                    e.tt && (this.loadTime = e.tt);
                    e.obo && (this.oboError = e.obo);
                    e.dm && !BOOMR.session.domain && (BOOMR.session.domain = e.dm);
                    e.se && (a.session_exp = e.se);
                    e.bcn && (this.beacon_url = e.bcn);
                    e.rl && "1" === e.rl && (BOOMR.session.rate_limited = !0)
                }
            },
            maybeResetSession: function(e, t) {
                var n = 0;
                BOOMR.session.start && BOOMR.session.length && (n = (BOOMR.now() - BOOMR.session.start) / BOOMR.session.length);
                var r = 1e3 * a.session_exp;
                if (!BOOMR.session.start || t && BOOMR.session.start > t || e - (a.lastActionTime || BOOMR.t_start) > r || r < n) {
                    BOOMR.session.start = t || BOOMR.plugins.RT.navigationStart() || BOOMR.t_lstart || BOOMR.t_start;
                    BOOMR.session.length = 0;
                    BOOMR.session.rate_limited = !1;
                    a.loadTime = 0;
                    a.oboError = 0;
                    a.beacon_url = a.next_beacon_url;
                    a.lastActionTime = e;
                    a.updateCookie({
                        rl: undefined,
                        sl: BOOMR.session.length,
                        ss: BOOMR.session.start,
                        tt: a.loadTime,
                        obo: undefined,
                        bcn: a.beacon_url
                    })
                }
            },
            initFromCookie: function() {
                var e, t, n = BOOMR.plugins.RT.getCookie();
                this.cookie || (BOOMR.session.enabled = !1);
                if (n) {
                    n.s = Math.max(+n.ld || 0, Math.max(+n.ul || 0, +n.cl || 0));
                    if (n.s && (n.r || n.nu)) {
                        this.r = n.r;
                        e = BOOMR.utils.hashString(r.URL);
                        t = BOOMR.utils.hashString(r && r.referrer || "");
                        n.cl;
                        n.nu;
                        if (!this.strict_referrer || n.cl && n.nu && n.nu === e && n.s < +n.cl + 15 || n.s === +n.ul && this.r === t) {
                            this.t_start = n.s;
                            +n.hd > n.s && (this.t_fb_approx = n.hd)
                        } else
                            this.t_start = this.t_fb_approx = undefined
                    }
                    n.s && (this.lastActionTime = n.s);
                    this.refreshSession(n);
                    this.updateCookie({
                        s: undefined,
                        ul: undefined,
                        cl: undefined,
                        hd: undefined,
                        ld: undefined,
                        rl: undefined,
                        r: undefined,
                        nu: undefined,
                        sh: undefined
                    });
                    this.maybeResetSession(BOOMR.now())
                }
            },
            incrementSessionDetails: function() {
                BOOMR.session.length++;
                !a.timers.t_done || isNaN(a.timers.t_done.delta) ? a.oboError++ : a.loadTime += a.timers.t_done.delta
            },
            getBoomerangTimings: function() {
                var e, t, n, r, i;
                function o(e, t) {
                    var n = Math.round(e || 0)
                      , r = Math.round(t || 0);
                    return (n = 0 === n ? 0 : n - r) || ""
                }
                if (BOOMR.t_start) {
                    BOOMR.plugins.RT.startTimer("boomerang", BOOMR.t_start);
                    BOOMR.plugins.RT.endTimer("boomerang", BOOMR.t_end);
                    BOOMR.plugins.RT.endTimer("boomr_fb", BOOMR.t_start);
                    if (BOOMR.t_lstart) {
                        BOOMR.plugins.RT.endTimer("boomr_ld", BOOMR.t_lstart);
                        BOOMR.plugins.RT.setTimer("boomr_lat", BOOMR.t_start - BOOMR.t_lstart)
                    }
                }
                try {
                    if (window && "performance"in window && window.performance && "function" == typeof window.performance.getEntriesByName) {
                        t = {
                            "rt.bmr": BOOMR.url
                        };
                        BOOMR.config_url && (t["rt.cnf"] = BOOMR.config_url);
                        for (n in t)
                            if (t.hasOwnProperty(n) && t[n]) {
                                if (!(e = window.performance.getEntriesByName(t[n])) || 0 === e.length || !e[0])
                                    continue;
                                i = [r = o((e = e[0]).startTime, 0), o(e.responseEnd, r), o(e.responseStart, r), o(e.requestStart, r), o(e.connectEnd, r), o(e.secureConnectionStart, r), o(e.connectStart, r), o(e.domainLookupEnd, r), o(e.domainLookupStart, r), o(e.redirectEnd, r), o(e.redirectStart, r)].join(",").replace(/,+$/, "");
                                BOOMR.addVar(n, i, !0)
                            }
                    }
                } catch (a) {
                    a && a.name && a.name.hasOwnProperty("length") && -1 === a.name.indexOf("NS_ERROR_FAILURE") && BOOMR.addError(a, "rt.getBoomerangTimings")
                }
            },
            checkPreRender: function() {
                if ("prerender" !== BOOMR.visibilityState())
                    return !1;
                BOOMR.plugins.RT.startTimer("t_load", this.navigationStart);
                BOOMR.plugins.RT.endTimer("t_load");
                BOOMR.plugins.RT.startTimer("t_prerender", this.navigationStart);
                BOOMR.plugins.RT.startTimer("t_postrender");
                return !0
            },
            initFromNavTiming: function() {
                var e, t;
                if (!this.navigationStart) {
                    (t = BOOMR.getPerformance()) && t.navigation && (this.navigationType = t.navigation.type);
                    if (t && t.timing) {
                        e = t.timing;
                        this.navigationStartSource = "navigation"
                    } else if (n.chrome && n.chrome.csi && n.chrome.csi().startE) {
                        e = {
                            navigationStart: n.chrome.csi().startE
                        };
                        this.navigationStartSource = "csi"
                    } else if (n.gtbExternal && n.gtbExternal.startE()) {
                        e = {
                            navigationStart: n.gtbExternal.startE()
                        };
                        this.navigationStartSource = "gtb"
                    }
                    if (e) {
                        this.navigationStart = e.navigationStart || e.fetchStart || undefined;
                        this.fetchStart = e.fetchStart || undefined;
                        this.responseStart = e.responseStart || undefined;
                        navigator.userAgent.match(/Firefox\/[78]\./) && (this.navigationStart = e.unloadEventStart || e.fetchStart || undefined)
                    } else
                        BOOMR.warn("This browser doesn't support the WebTiming API", "rt")
                }
            },
            validateLoadTimestamp: function(e, t, n) {
                var r;
                return t && t.timing && t.timing.loadEventEnd ? t.timing.loadEventEnd : "xhr" !== n || t && BOOMR.utils.inArray(t.initiator, BOOMR.constants.BEACON_TYPE_SPAS) ? (r = BOOMR.getPerformance()) && r.timing ? r.timing.loadEventEnd ? r.timing.loadEventEnd : e : BOOMR.t_onload || BOOMR.t_lstart || BOOMR.t_start || e : e
            },
            setPageLoadTimers: function(e, t, n) {
                var r, i;
                if (!("xhr" === e || "early" === e && n && BOOMR.utils.inArray(n.initiator, BOOMR.constants.BEACON_TYPE_SPAS))) {
                    a.initFromCookie();
                    a.initFromNavTiming();
                    BOOMR.addVar("rt.start", this.navigationStartSource);
                    if (a.checkPreRender())
                        return !1
                }
                if ("xhr" === e)
                    if (n.timers)
                        for (var o in n.timers)
                            n.timers.hasOwnProperty(o) && BOOMR.plugins.RT.setTimer(o, n.timers[o]);
                    else
                        n && n.timing && (void 0 === (i = n.timing.fetchStart) || n.timing.responseEnd >= i) && (r = n.timing.responseEnd);
                else
                    a.responseStart ? a.responseStart >= a.navigationStart && a.responseStart >= a.fetchStart && (r = a.responseStart) : a.timers.hasOwnProperty("t_page") ? BOOMR.plugins.RT.endTimer("t_page") : a.t_fb_approx && (r = a.t_fb_approx);
                if (r && "early" !== e) {
                    i ? BOOMR.plugins.RT.setTimer("t_resp", i, r) : BOOMR.plugins.RT.endTimer("t_resp", r);
                    "load" === e && a.timers.t_load ? BOOMR.plugins.RT.setTimer("t_page", a.timers.t_load.end - r) : t < r ? BOOMR.addVar("t_page.inv", 1, !0) : BOOMR.plugins.RT.setTimer("t_page", t - r)
                }
                if ("load" === e && a.timers.hasOwnProperty("t_postrender")) {
                    BOOMR.plugins.RT.endTimer("t_postrender");
                    BOOMR.plugins.RT.endTimer("t_prerender")
                }
                return !0
            },
            setSupportingTimestamps: function(e, t) {
                e && BOOMR.addVar("rt.tstart", e, !0);
                "number" == typeof a.navigationStart && a.navigationStart !== e && BOOMR.addVar("rt.nstart", a.navigationStart, !0);
                "number" == typeof a.t_start && a.t_start !== e && BOOMR.addVar("rt.cstart", a.t_start, !0);
                BOOMR.addVar("rt.bstart", BOOMR.t_start, !0);
                BOOMR.t_lstart && BOOMR.addVar("rt.blstart", BOOMR.t_lstart, !0);
                "early" === t ? BOOMR.addVar("rt.end", e || BOOMR.now(), !0) : a.timers.t_done && BOOMR.addVar("rt.end", a.timers.t_done.end, !0)
            },
            determineTStart: function(e, t) {
                var n;
                if ("xhr" === e || "early" === e && t && "spa" === t.initiator) {
                    t && t.name && a.timers[t.name] ? n = a.timers[t.name].start : t && t.timing && t.timing.requestStart && (n = t.timing.requestStart);
                    void 0 === n && t && BOOMR.utils.inArray(t.initiator, BOOMR.constants.BEACON_TYPE_SPAS) ? BOOMR.addVar("rt.start", "none") : BOOMR.addVar("rt.start", "manual");
                    a.cached_xhr_start = n
                } else {
                    if (a.navigationStart)
                        n = a.navigationStart;
                    else if (a.t_start && 2 !== a.navigationType) {
                        n = a.t_start;
                        BOOMR.addVar("rt.start", "cookie")
                    } else if (a.cached_t_start)
                        n = a.cached_t_start;
                    else {
                        BOOMR.addVar("rt.start", "none");
                        n = undefined
                    }
                    a.cached_t_start = n
                }
                return n
            },
            page_ready: function() {
                this.onloadfired = !0
            },
            check_visibility: function() {
                "visible" === BOOMR.visibilityState() && (a.visiblefired = !0)
            },
            prerenderToVisible: function() {
                if (a.onloadfired && a.autorun) {
                    BOOMR.addVar("vis.pre", "1", !0);
                    BOOMR.plugins.RT.done(null, "visible")
                }
            },
            page_unload: function(e) {
                this.unloadfired || BOOMR.plugins.RT.done(e, "unload");
                this.updateCookie(!a.navigationStart && a.strict_referrer ? {
                    r: BOOMR.utils.hashString(r.URL)
                } : null, "beforeunload" === e.type ? "ul" : "hd");
                this.unloadfired = !0
            },
            _iterable_click: function(e, t, n, r) {
                console.log(e, t, n, r)
                var i;
                if (n) {
                    // for (; n && n.nodeName && n.nodeName.toUpperCase() !== t; )
                    //     n = n.parentNode;
                    if (n && n.nodeName === t) {
                        this.refreshSession();
                        this.maybeResetSession(BOOMR.now());
                        // i = r(n);
                        i = "demo-track-and-trace-utapi.shtml?";
                        console.log(n, "|", i)
                        this.updateCookie({
                            nu: BOOMR.utils.hashString(i)
                        }, "cl");
                        BOOMR.addVar("nu", BOOMR.utils.cleanupURL(i), !0)
                    }
                }
            },
            onclick: function(e) {
                a._iterable_click("Click", "A", e, function(e) {
                    return e.href
                })
            },
            markComplete: function() {
                this.onloadfired && (a.complete = !0)
            },
            onsubmit: function(e) {
                a._iterable_click("Submit", "FORM", e, function(e) {
                    var t = "function" == typeof e.getAttribute && e.getAttribute("action") || r.URL || "";
                    return t.match(/\?/) ? t : t + "?"
                })
            },
            onconfig: function(e) {
                e.beacon_url && (a.beacon_url = e.beacon_url);
                if (e.RT) {
                    e.RT.oboError && !isNaN(e.RT.oboError) && e.RT.oboError > a.oboError && (a.oboError = e.RT.oboError);
                    if (e.RT.loadTime && !isNaN(e.RT.loadTime) && e.RT.loadTime > a.loadTime) {
                        a.loadTime = e.RT.loadTime;
                        a.timers.t_done && !isNaN(a.timers.t_done.delta) && (a.loadTime += a.timers.t_done.delta)
                    }
                }
            },
            domloaded: function() {
                BOOMR.plugins.RT && BOOMR.plugins.RT.endTimer("t_domloaded")
            },
            clear: function(e) {
                e && "undefined" != typeof e.early || BOOMR.removeVar("rt.start")
            },
            spaNavigation: function() {
                a.onloadfired = !0
            }
        };
        BOOMR.plugins.RT = {
            init: function(e) {
                n !== BOOMR.window && (n = BOOMR.window);
                e && e.CrossDomain && e.CrossDomain.sending && (a.crossdomain_sending = !0);
                if (n && n.document) {
                    r = n.document;
                    BOOMR.utils.pluginConfig(a, e, "RT", ["cookie", "cookie_exp", "session_exp", "strict_referrer"]);
                    e && "undefined" != typeof e.autorun && (a.autorun = e.autorun);
                    if (e && e.beacon_url) {
                        a.beacon_url && !e.force_beacon_url || (a.beacon_url = e.beacon_url);
                        a.next_beacon_url = e.beacon_url
                    }
                    void 0 !== r && (a.r = BOOMR.utils.hashQueryString(r.referrer, !0));
                    a.initFromCookie();
                    if (a.initialized)
                        return this;
                    a.complete = !1;
                    a.timers = {};
                    a.check_visibility();
                    BOOMR.subscribe("page_ready", a.page_ready, null, a);
                    BOOMR.subscribe("visibility_changed", a.check_visibility, null, a);
                    BOOMR.subscribe("prerender_to_visible", a.prerenderToVisible, null, a);
                    BOOMR.subscribe("page_ready", this.done, "load", this);
                    BOOMR.subscribe("xhr_load", this.done, "xhr", this);
                    BOOMR.subscribe("before_early_beacon", this.done, "early", this);
                    BOOMR.subscribe("dom_loaded", a.domloaded, null, a);
                    BOOMR.subscribe("page_unload", a.page_unload, null, a);
                    BOOMR.subscribe("click", a.onclick, null, a);
                    BOOMR.subscribe("form_submit", a.onsubmit, null, a);
                    BOOMR.subscribe("before_beacon", this.addTimersToBeacon, "beacon", this);
                    BOOMR.subscribe("beacon", a.clear, null, a);
                    BOOMR.subscribe("error", a.markComplete, null, a);
                    BOOMR.subscribe("config", a.onconfig, null, a);
                    BOOMR.subscribe("spa_navigation", a.spaNavigation, null, a);
                    BOOMR.subscribe("interaction", a.markComplete, null, a);
                    BOOMR.getBeaconURL = function() {
                        return a.beacon_url
                    }
                    ;
                    a.initialized = !0;
                    return this
                }
            },
            startTimer: function(e, t) {
                if (e) {
                    "t_page" === e && this.endTimer("t_resp", t);
                    a.timers[e] = {
                        start: "number" == typeof t ? t : BOOMR.now()
                    }
                }
                return this
            },
            endTimer: function(e, t) {
                if (e) {
                    a.timers[e] = a.timers[e] || {};
                    a.timers[e].end === undefined && (a.timers[e].end = "number" == typeof t ? t : BOOMR.now())
                }
                return this
            },
            clearTimer: function(e) {
                e && delete a.timers[e];
                return this
            },
            setTimer: function(e, t, n) {
                e && (a.timers[e] = void 0 !== n ? {
                    start: t,
                    end: n,
                    delta: n - t
                } : {
                    delta: t
                });
                return this
            },
            addTimersToBeacon: function(e, t) {
                var n, r, i = [];
                for (n in a.timers)
                    if (a.timers.hasOwnProperty(n)) {
                        if ("number" != typeof (r = a.timers[n]).delta) {
                            "number" != typeof r.start && (r.start = "xhr" === t ? a.cached_xhr_start : a.cached_t_start);
                            r.delta = r.end - r.start
                        }
                        if (isNaN(r.delta))
                            continue;
                        a.basic_timers.hasOwnProperty(n) ? BOOMR.addVar(n, r.delta, !0) : i.push(n + "|" + r.delta)
                    }
                i.length && BOOMR.addVar("t_other", i.join(","), !0);
                if ("beacon" === t && (!e || "undefined" == typeof e.early)) {
                    a.timers = {};
                    a.complete = !1
                }
            },
            done: function(e, t) {
                if (BOOMR.plugins.RT) {
                    var n, r, i = BOOMR.now(), o = !1;
                    a.complete = !1;
                    r = a.validateLoadTimestamp(i, e, t);
                    if (("load" === t || "visible" === t || "xhr" === t || "early" === t) && !a.setPageLoadTimers(t, r, e))
                        return this;
                    ("load" === t || "visible" === t || "early" === t && (!e || "undefined" == typeof e.initiator || "spa_hard" === e.initiator) || "xhr" === t && e && "spa_hard" === e.initiator) && a.getBoomerangTimings();
                    n = a.determineTStart(t, e);
                    a.refreshSession();
                    a.maybeResetSession(r, n);
                    "early" !== t && this.endTimer("t_done", r);
                    e && "xhr" === e.initiator && this.setTimer("t_done", e.timing.requestStart, e.timing.loadEventEnd);
                    a.setSupportingTimestamps(n, t);
                    this.addTimersToBeacon(null, t);
                    BOOMR.setReferrer(a.r);
                    "xhr" === t && e && e && e.data && (e = e.data);
                    if ("xhr" === t && e) {
                        o = e.subresource;
                        e.url && BOOMR.addVar("u", BOOMR.utils.cleanupURL(e.url.replace(/#.*/, "")), !0);
                        e.status && (e.status < -1 || 400 <= e.status) && BOOMR.addVar("http.errno", e.status, !0);
                        e.method && "GET" !== e.method && BOOMR.addVar("http.method", e.method, !0);
                        e.type && "xhr" !== e.type && BOOMR.addVar("http.type", e.type[0], !0);
                        e.headers && BOOMR.addVar("http.hdr", e.headers, !0);
                        e.synchronous && BOOMR.addVar("xhr.sync", 1, !0);
                        e.initiator && BOOMR.addVar("http.initiator", e.initiator, !0);
                        e.responseBodyNotUsed && BOOMR.addVar("fetch.bnu", 1, !0)
                    }
                    o && "passive" !== o && BOOMR.addVar("rt.subres", 1, !0);
                    if ("load" === t || "visible" === t || "xhr" === t && !o || "unload" === t && !a.onloadfired && a.autorun && !a.crossdomain_sending) {
                        a.incrementSessionDetails();
                        a.updateCookie(null, "ld")
                    }
                    BOOMR.addVar({
                        "rt.tt": a.loadTime,
                        "rt.obo": a.oboError
                    }, undefined, !0);
                    a.updateCookie();
                    if ("unload" === t) {
                        BOOMR.addVar("rt.quit", "", !0);
                        a.onloadfired || BOOMR.addVar("rt.abld", "", !0);
                        a.visiblefired || BOOMR.addVar("rt.ntvu", "", !0)
                    }
                    "early" !== t && (a.complete = !0);
                    BOOMR.sendBeacon(a.beacon_url);
                    return this
                }
            },
            is_complete: function(e) {
                return a.complete || e && "error" === e["http.initiator"] || e && "undefined" != typeof e.early
            },
            updateCookie: function() {
                a.updateCookie()
            },
            getCookie: function() {
                var e, t, n;
                if (!a.cookie)
                    return !1;
                if (e = BOOMR.utils.getSubCookies(BOOMR.utils.getCookie(a.cookie)) || {}) {
                    if (1 & e.z) {
                        t = 36;
                        n = parseInt(e.ss || 0, 36)
                    } else {
                        t = 10;
                        n = 0
                    }
                    e.ss = parseInt(e.ss || 0, t);
                    e.tt = parseInt(e.tt || 0, t);
                    e.obo = parseInt(e.obo || 0, t);
                    e.sl = parseInt(e.sl || 0, t);
                    e.se && (e.se = parseInt(e.se, t) || 1800);
                    e.ld && (e.ld = n + parseInt(e.ld, t));
                    e.ul && (e.ul = n + parseInt(e.ul, t));
                    console.log("cl1", e)
                    e.cl && (e.cl = n + parseInt(e.cl, t));

                    console.log("cl2", e)
                    e.hd && (e.hd = n + parseInt(e.hd, t))
                }
                return e
            },
            incrementSessionDetails: function() {
                a.incrementSessionDetails()
            },
            navigationStart: function() {
                a.navigationStart || a.initFromNavTiming();
                return a.navigationStart
            }
        }
    }
    return a
};
!function() {
    if (!BOOMR.plugins.CrossDomain) {
        var d = BOOMR.window;
        if (d) {
            var f = BOOMR.window.document
              , p = {
                enabled: !1,
                cross_domain_url: undefined,
                session_transferred: !1,
                debug: !1,
                iframe_name: "boomerang-cross-domain-session-fetch",
                iframe: undefined,
                sending: !1,
                session: {
                    ID: undefined,
                    start: undefined,
                    length: undefined
                },
                session_transferred_time: 0,
                plugin_start: 0,
                session_transfer_timedout: !1,
                session_transfer_timeout: 5e3,
                session_transfer_complete: !1,
                setup: function(e) {
                    var t = BOOMR.session;
                    if (BOOMR.plugins.RT) {
                        var n = BOOMR.plugins.RT.getCookie();
                        if (n) {
                            n.obo && (t.obo = n.obo);
                            n.tt && (t.tt = n.tt)
                        }
                    }
                    e = e + "#" + BOOMR.utils.objectToString(t, "&");
                    f.body.appendChild(p.buildIFrame(e, p.iframe_name));
                    d.addEventListener ? d.addEventListener("message", p.onIFrameMessage) : d.attachEvent("onmessage", p.onIFrameMessage)
                },
                onIFrameMessage: function(e) {
                    var t;
                    if (d.JSON && -1 !== p.cross_domain_url.indexOf(e.origin)) {
                        try {
                            t = d.JSON.parse(e.data)
                        } catch (n) {
                            return
                        }
                        if (t) {
                            p.session = {
                                ID: t.si,
                                start: parseInt(t.ss, 10),
                                length: parseInt(t.sl, 10)
                            };
                            p.session_transferred_time = BOOMR.now();
                            t.bcn ? BOOMR.fireEvent("config", {
                                beacon_url: t.bcn,
                                RT: {
                                    oboError: t.obo ? parseInt(t.obo, 10) : 0,
                                    loadTime: t.tt ? parseInt(t.tt, 10) : 0
                                }
                            }) : BOOMR.fireEvent("config", {
                                beacon_url: BOOMR.getBeaconURL()
                            });
                            p.session_transferred = !0;
                            BOOMR.sendBeacon();
                            setTimeout(function() {
                                p.debug || null === f.getElementById(p.iframe_name) || f.body.removeChild(f.getElementById(p.iframe_name))
                            }, 0)
                        }
                    }
                },
                buildIFrame: function(e, t) {
                    var n;
                    try {
                        n = f.createElement("<IFRAME>")
                    } catch (r) {
                        n = f.createElement("IFRAME")
                    }
                    n.id = t;
                    n.src = e;
                    n.style.display = "none";
                    return n
                }
            };
            BOOMR.plugins.CrossDomain = {
                init: function(e) {
                    var t;
                    if (BOOMR.plugins.RT && !e.primary) {
                        e.CrossDomain && (p.enabled = !0);
                        BOOMR.utils.pluginConfig(p, e, "CrossDomain", ["cross_domain_url", "sending", "session_transfer_timeout", "debug"]);
                        if (p.enabled && !p.session_transferred) {
                            p.plugin_start = BOOMR.now();
                            BOOMR.forceSameSiteCookieNone();
                            if (BOOMR.utils.hasPostMessageSupport()) {
                                if (!p.sending && p.enabled) {
                                    p.cross_domain_url && (p.cross_domain_url = p.cross_domain_url.replace(/^\s+|\s+$/g, ""));
                                    if (!p.cross_domain_url) {
                                        p.enabled = !1;
                                        return
                                    }
                                    (t = f.createElement("a")).href = p.cross_domain_url;
                                    if (t.href === BOOMR.window.location.href || !t.href.match(/^https?:\/\//)) {
                                        p.enabled = !1;
                                        return
                                    }
                                    p.cross_domain_url = t.href;
                                    p.setup(p.cross_domain_url);
                                    setTimeout(function() {
                                        if (!p.session_transferred) {
                                            p.session_transfer_timedout = !0;
                                            p.session_transferred = !0;
                                            p.debug || f.body.removeChild(f.getElementById(p.iframe_name));
                                            BOOMR.sendBeacon()
                                        }
                                    }, p.session_transfer_timeout)
                                }
                                if (p.sending && p.enabled) {
                                    BOOMR.disable();
                                    for (var n = d.location.hash.substring(1, d.location.hash.length).split("&"), r = {}, i = 0; i < n.length; i++) {
                                        var o = n[i].split("=");
                                        o && o.hasOwnProperty("length") && 2 <= o.length && (r[o[0]] = o[1])
                                    }
                                    var a = {
                                        start: r.start,
                                        length: r.length,
                                        ID: r.ID
                                    }
                                      , s = {
                                        obo: r.obo,
                                        tt: r.tt
                                    };
                                    try {
                                        a.start = parseInt(a.start);
                                        a.length = parseInt(a.length);
                                        if (("number" != typeof BOOMR.session.start || a.start < BOOMR.session.start) && a.length >= BOOMR.session.length && a.start > BOOMR.now() - 864e5) {
                                            BOOMR.session.start = a.start;
                                            BOOMR.session.ID && "string" != typeof a.ID || (BOOMR.session.ID = a.ID)
                                        }
                                        BOOMR.plugins.RT.updateCookie();
                                        s.obo = parseInt(s.obo);
                                        s.tt = parseInt(s.tt);
                                        isNaN(s.obo) || isNaN(s.tt) || this.updateCookie(s)
                                    } catch (c) {}
                                    BOOMR.session.start || (BOOMR.plugins.RT.navigationStart() || BOOMR.t_lstart || BOOMR.t_start);
                                    var u = BOOMR.plugins.RT.getCookie();
                                    if (!d.JSON)
                                        return;
                                    var l = d.JSON.stringify(u);
                                    d.parent.postMessage(l, "*");
                                    p.session_transferred = !0
                                }
                            } else {
                                p.session_transferred = !0;
                                p.enabled = !1
                            }
                        }
                    }
                },
                updateCookie: function(e) {
                    BOOMR.plugins.RT && BOOMR.fireEvent("config", {
                        RT: {
                            oboError: e.obo,
                            loadTime: e.tt
                        }
                    })
                },
                is_complete: function() {
                    if (p.sending)
                        return !0;
                    if (p.session_transfer_complete)
                        return !0;
                    if (p.session && !p.session_transfer_timedout && p.enabled && p.session_transferred) {
                        if (!isNaN(p.session.start) && p.session.start > BOOMR.now() - 864e5 && p.session.start < ("number" == typeof BOOMR.session.start ? BOOMR.session.start : BOOMR.now())) {
                            BOOMR.session.start = p.session.start;
                            if (!isNaN(p.session.length) && p.session.length > BOOMR.session.length) {
                                BOOMR.session.length = p.session.length;
                                BOOMR.plugins.RT.incrementSessionDetails()
                            }
                            BOOMR.session.ID = p.session.ID;
                            BOOMR.plugins.RT && BOOMR.plugins.RT.updateCookie()
                        }
                        BOOMR.addVar("rt.sstr_dur", p.session_transferred_time - p.plugin_start);
                        p.session_transfer_complete = !0
                    }
                    p.session_transfer_timedout && BOOMR.addVar("rt.sstr_to", 1);
                    return p.session_transferred || !p.enabled
                }
            }
        }
    }
}();
!function() {
    var l, y;
    if (!BOOMR.plugins.BW) {
        (y = [{
            name: "image-0.png",
            size: 11773,
            timeout: 1400
        }, {
            name: "image-1.png",
            size: 40836,
            timeout: 1200
        }, {
            name: "image-2.png",
            size: 165544,
            timeout: 1300
        }, {
            name: "image-3.png",
            size: 382946,
            timeout: 1500
        }, {
            name: "image-4.png",
            size: 1236278,
            timeout: 1200
        }, {
            name: "image-5.png",
            size: 4511798,
            timeout: 1200
        }, {
            name: "image-6.png",
            size: 9092136,
            timeout: 1200
        }]).end = y.length;
        y.start = 0;
        y.l = {
            name: "image-l.gif",
            size: 35,
            timeout: 1e3
        };
        l = {
            base_url: "",
            timeout: 15e3,
            nruns: 5,
            latency_runs: 10,
            user_ip: "",
            block_beacon: !1,
            test_https: !1,
            cookie_exp: 604800,
            cookie: "BA",
            results: [],
            latencies: [],
            latency: null,
            runs_left: 0,
            aborted: !1,
            complete: !0,
            running: !1,
            initialized: !1,
            ncmp: function(e, t) {
                return e - t
            },
            iqr: function(e) {
                var t, n = e.length - 1, r = [], i = (e[Math.floor(.25 * n)] + e[Math.ceil(.25 * n)]) / 2, o = (e[Math.floor(.75 * n)] + e[Math.ceil(.75 * n)]) / 2, a = 1.5 * (o - i);
                if (0 == a)
                    return e;
                n++;
                for (t = 0; t < n && e[t] < o + a; t++)
                    e[t] > i - a && r.push(e[t]);
                return r
            },
            calc_latency: function() {
                var e, t, n, r, i, o, a = 0, s = 0;
                this.latencies.shift();
                t = (o = this.iqr(this.latencies.sort(this.ncmp))).length;
                for (e = 0; e < t; e++) {
                    a += o[e];
                    s += o[e] * o[e]
                }
                n = Math.round(a / t);
                i = (1.96 * (r = Math.sqrt(s / t - a * a / (t * t))) / Math.sqrt(t)).toFixed(2);
                r = r.toFixed(2);
                return {
                    mean: n,
                    median: Math.round((o[Math.floor(t / 2)] + o[Math.ceil(t / 2)]) / 2),
                    stddev: r,
                    stderr: i
                }
            },
            calc_bw: function() {
                for (var e, t, n, r, i, o, a, s, u, l, c, d, f, p = 0, O = [], m = [], h = 0, g = 0, R = 0, M = 0, B = [], v = 0; v < this.nruns; v++)
                    if (this.results[v] && this.results[v].r) {
                        c = 0;
                        for (e = (t = this.results[v].r).length - 1; 0 <= e && c < 3 && t[e]; e--)
                            if (null !== t[e].t) {
                                p++;
                                c++;
                                d = 1e3 * y[e].size / t[e].t;
                                O.push(d);
                                if (t[e].t > this.latency.mean) {
                                    f = 1e3 * y[e].size / (t[e].t - this.latency.mean);
                                    m.push(f)
                                } else
                                    B.push(e + "_" + t[e].t)
                            }
                    }
                if (3 < O.length) {
                    O = this.iqr(O.sort(this.ncmp));
                    m = this.iqr(m.sort(this.ncmp))
                } else {
                    O = O.sort(this.ncmp);
                    m = m.sort(this.ncmp)
                }
                p = Math.max(O.length, m.length);
                for (v = 0; v < p; v++) {
                    if (v < O.length) {
                        h += O[v];
                        g += Math.pow(O[v], 2)
                    }
                    if (v < m.length) {
                        R += m[v];
                        M += Math.pow(m[v], 2)
                    }
                }
                p = O.length;
                n = Math.round(h / p);
                r = Math.sqrt(g / p - Math.pow(h / p, 2));
                i = Math.round(1.96 * r / Math.sqrt(p));
                r = Math.round(r);
                p = O.length - 1;
                o = Math.round((O[Math.floor(p / 2)] + O[Math.ceil(p / 2)]) / 2);
                if (m.length < 1) {
                    B.push("l==" + m.length);
                    a = n;
                    s = r;
                    u = i;
                    l = o
                } else {
                    p = m.length;
                    a = Math.round(R / p);
                    u = (1.96 * (s = Math.sqrt(M / p - Math.pow(R / p, 2))) / Math.sqrt(p)).toFixed(2);
                    s = s.toFixed(2);
                    p = m.length - 1;
                    l = Math.round((m[Math.floor(p / 2)] + m[Math.ceil(p / 2)]) / 2)
                }
                return {
                    mean: n,
                    stddev: r,
                    stderr: i,
                    median: o,
                    mean_corrected: a,
                    stddev_corrected: s,
                    stderr_corrected: u,
                    median_corrected: l,
                    debug_info: B
                }
            },
            load_img: function(t, n, r) {
                var e = this.base_url + y[t].name + "?t=" + BOOMR.utils.generateId(10)
                  , i = 0
                  , o = 0
                  , a = new Image
                  , s = this;
                function u(e) {
                    return function() {
                        r && r.call(s, t, o, n, e);
                        if (null !== e) {
                            a.onload = a.onerror = null;
                            a = null;
                            clearTimeout(i);
                            s = r = null
                        }
                    }
                }
                a.onload = u(!0);
                a.onerror = u(!1);
                i = setTimeout(u(null), y[t].timeout + Math.min(400, this.latency ? this.latency.mean : 400));
                o = BOOMR.now();
                a.src = e
            },
            lat_loaded: function(e, t, n, r) {
                if (n === this.latency_runs + 1) {
                    if (null !== r) {
                        var i = BOOMR.now() - t;
                        this.latencies.push(i)
                    }
                    0 === this.latency_runs && (this.latency = this.calc_latency());
                    BOOMR.setImmediate(this.iterate, null, null, this)
                }
            },
            img_loaded: function(e, t, n, r) {
                if (n === this.runs_left + 1 && !this.results[this.nruns - n].r[e])
                    if (null !== r) {
                        var i = {
                            start: t,
                            end: BOOMR.now(),
                            t: null,
                            state: r,
                            run: n
                        };
                        r && (i.t = i.end - i.start);
                        this.results[this.nruns - n].r[e] = i;
                        if (e >= y.end - 1 || this.results[this.nruns - n].r[e + 1] !== undefined) {
                            n === this.nruns && (y.start = e);
                            BOOMR.setImmediate(this.iterate, null, null, this)
                        } else
                            this.load_img(e + 1, n, this.img_loaded)
                    } else
                        this.results[this.nruns - n].r[e + 1] = {
                            t: null,
                            state: null,
                            run: n
                        }
            },
            finish: function() {
                this.latency || (this.latency = this.calc_latency());
                var e = this.calc_bw()
                  , t = {
                    bw: e.median_corrected,
                    bw_err: parseFloat(e.stderr_corrected, 10),
                    lat: this.latency.mean,
                    lat_err: parseFloat(this.latency.stderr, 10),
                    bw_time: Math.round(BOOMR.now() / 1e3)
                };
                BOOMR.addVar(t);
                0 < e.debug_info.length && BOOMR.addVar("bw_debug", e.debug_info.join(","));
                !isNaN(t.bw) && 0 < t.bw && BOOMR.utils.setCookie(this.cookie, {
                    ba: Math.round(t.bw),
                    be: t.bw_err,
                    l: t.lat,
                    le: t.lat_err,
                    ip: this.user_ip,
                    t: t.bw_time
                }, this.user_ip ? this.cookie_exp : 0);
                (this.complete = !0) === this.block_beacon && BOOMR.sendBeacon();
                this.running = !1
            },
            iterate: function() {
                if (!this.aborted)
                    if (this.runs_left)
                        if (this.latency_runs)
                            this.load_img("l", this.latency_runs--, this.lat_loaded);
                        else {
                            this.results.push({
                                r: []
                            });
                            this.load_img(y.start, this.runs_left--, this.img_loaded)
                        }
                    else
                        this.finish()
            },
            setVarsFromCookie: function() {
                var e, t, n, r, i, o, a, s, u = BOOMR.utils.getSubCookies(BOOMR.utils.getCookie(l.cookie));
                if (u && u.ba) {
                    e = parseInt(u.ba, 10);
                    t = parseFloat(u.be, 10);
                    n = parseInt(u.l, 10) || 0;
                    r = parseFloat(u.le, 10) || 0;
                    i = u.ip.replace(/\.\d+$/, "0");
                    o = parseInt(u.t, 10);
                    a = this.user_ip.replace(/\.\d+$/, "0");
                    s = Math.round(BOOMR.now() / 1e3);
                    if (i === a && o >= s - this.cookie_exp && 0 < e) {
                        this.complete = !0;
                        BOOMR.addVar({
                            bw: e,
                            lat: n,
                            bw_err: t,
                            lat_err: r,
                            bw_time: o
                        });
                        return !0
                    }
                }
                return !1
            }
        };
        BOOMR.plugins.BW = {
            init: function(e) {
                if (l.initialized)
                    return this;
                BOOMR.utils.pluginConfig(l, e, "BW", ["base_url", "timeout", "nruns", "cookie", "cookie_exp", "test_https", "block_beacon"]);
                e && e.user_ip && (l.user_ip = e.user_ip);
                if (!l.base_url)
                    return this;
                y.start = 0;
                l.runs_left = l.nruns;
                l.latency_runs = 10;
                l.results = [];
                l.latencies = [];
                l.latency = null;
                l.complete = l.aborted = !1;
                BOOMR.removeVar("ba", "ba_err", "lat", "lat_err");
                l.setVarsFromCookie() || BOOMR.subscribe("page_ready", this.run, null, this);
                l.initialized = !0;
                return this
            },
            run: function() {
                var e;
                if (l.running || l.complete)
                    return this;
                (e = BOOMR.window.document.createElement("a")).href = l.base_url;
                if (!l.test_https && "https:" === e.protocol) {
                    BOOMR.info("HTTPS detected, skipping bandwidth test", "bw");
                    (l.complete = !0) === l.block_beacon && BOOMR.sendBeacon();
                    return this
                }
                l.base_url = e.href;
                l.running = !0;
                setTimeout(this.abort, l.timeout);
                l.iterate();
                return this
            },
            abort: function() {
                l.aborted = !0;
                l.running && l.finish()
            },
            is_complete: function() {
                return !0 !== l.block_beacon || l.complete
            }
        }
    }
}();
!function() {
    if (!BOOMR.plugins.PaintTiming) {
        var o = {
            "first-paint": "fp",
            "first-contentful-paint": "fcp",
            "largest-contentful-paint": "lcp"
        }
          , a = {
            initialized: !1,
            complete: !1,
            supported: null,
            timingCache: {},
            observer: null,
            externalMetrics: {},
            done: function(e, t) {
                var n, r, i;
                if (this.complete)
                    return this;
                if ("load" !== t && (!e || "spa_hard" !== e.initiator)) {
                    this.complete = !0;
                    return this
                }
                if ((n = BOOMR.getPerformance()) && "function" == typeof n.getEntriesByType) {
                    if ((r = n.getEntriesByType("paint")) && r.length) {
                        BOOMR.info("This user agent supports PaintTiming", "pt");
                        for (i = 0; i < r.length; i++) {
                            a.timingCache[r[i].name] = r[i].startTime;
                            o[r[i].name] && BOOMR.addVar("pt." + o[r[i].name], Math.floor(r[i].startTime), !0)
                        }
                        this.complete = !0;
                        BOOMR.sendBeacon()
                    }
                } else
                    this.complete = !0
            },
            onObserver: function(e) {
                var t = e.getEntries();
                if (0 !== t.length) {
                    var n = t[t.length - 1]
                      , r = n.renderTime || n.loadTime;
                    a.timingCache[n.entryType] = r;
                    BOOMR.addVar("pt.lcp", Math.floor(r), !0);
                    a.externalMetrics.lcp = function() {
                        return Math.floor(r)
                    }
                }
            }
        };
        BOOMR.plugins.PaintTiming = {
            init: function() {
                if (!this.is_supported()) {
                    a.complete = !0;
                    a.initialized = !0
                }
                if (!a.complete && "hidden" === BOOMR.visibilityState()) {
                    BOOMR.addVar("pt.hid", 1, !0);
                    a.complete = !0
                }
                if (!a.initialized) {
                    BOOMR.subscribe("page_ready", a.done, "load", a);
                    BOOMR.subscribe("xhr_load", a.done, "xhr", a);
                    BOOMR.subscribe("before_unload", a.done, null, a);
                    if ("function" == typeof BOOMR.window.PerformanceObserver && "function" == typeof window.LargestContentfulPaint) {
                        a.observer = new BOOMR.window.PerformanceObserver(a.onObserver);
                        a.observer.observe({
                            type: "largest-contentful-paint",
                            buffered: !0
                        })
                    }
                    a.initialized = !0
                }
                return this
            },
            is_complete: function() {
                return !0
            },
            is_enabled: function() {
                return a.initialized && this.is_supported()
            },
            is_supported: function() {
                if (null !== a.supported)
                    return a.supported;
                var e = BOOMR.getPerformance();
                a.supported = e && "undefined" != typeof window.PerformancePaintTiming && "function" == typeof e.getEntriesByType;
                return a.supported
            },
            getTimingFor: function(e) {
                var t, n, r;
                if (a.timingCache[e])
                    return a.timingCache[e];
                if (this.is_supported()) {
                    if ((r = BOOMR.getPerformance()) && "function" == typeof r.getEntriesByType && (t = r.getEntriesByType("paint")) && t.length)
                        for (n = 0; n < t.length; n++)
                            if (t[n].name === e) {
                                a.timingCache[e] = t[n].startTime;
                                return a.timingCache[e]
                            }
                }
            },
            metrics: a.externalMetrics
        }
    }
}();
!function() {
    if (!BOOMR.plugins.NavigationTiming) {
        var c = {
            complete: !1,
            fullySent: !1,
            sendBeacon: function() {
                this.complete = !0;
                BOOMR.sendBeacon()
            },
            xhr_done: function(e) {
                var t;
                if (e && "spa_hard" === e.initiator)
                    c.done(e);
                else if (e && "spa" === e.initiator)
                    c.sendBeacon();
                else {
                    BOOMR.window;
                    var n, r, i = {};
                    if (e) {
                        e.data && (e = e.data);
                        if ((t = BOOMR.getPerformance()) && e.restiming) {
                            i = {
                                nt_red_st: e.restiming.redirectStart,
                                nt_red_end: e.restiming.redirectEnd,
                                nt_fet_st: e.restiming.fetchStart,
                                nt_dns_st: e.restiming.domainLookupStart,
                                nt_dns_end: e.restiming.domainLookupEnd,
                                nt_con_st: e.restiming.connectStart,
                                nt_con_end: e.restiming.connectEnd,
                                nt_req_st: e.restiming.requestStart,
                                nt_res_st: e.restiming.responseStart,
                                nt_res_end: e.restiming.responseEnd
                            };
                            e.restiming.secureConnectionStart && (i.nt_ssl_st = e.restiming.secureConnectionStart);
                            for (r in i)
                                if (i.hasOwnProperty(r) && i[r]) {
                                    i[r] += t.timing.navigationStart;
                                    i[r] = Math.floor(i[r])
                                }
                        }
                        if (e.timing) {
                            n = e.timing;
                            i.nt_req_st || (i.nt_req_st = n.requestStart);
                            i.nt_res_st || (i.nt_res_st = n.responseStart);
                            i.nt_res_end || (i.nt_res_end = n.responseEnd);
                            i.nt_domint = n.domInteractive;
                            i.nt_domcomp = n.domComplete;
                            i.nt_load_st = n.loadEventEnd;
                            i.nt_load_end = n.loadEventEnd
                        }
                        for (r in i)
                            i.hasOwnProperty(r) && !i[r] && delete i[r];
                        BOOMR.addVar(i, undefined, !0);
                        c.sendBeacon()
                    }
                }
            },
            done: function() {
                var e, t, n, r, i, o, a = BOOMR.window, s = {}, u = 0, l = !1;
                if (this.complete)
                    return this;
                if (e = BOOMR.getPerformance()) {
                    if ("function" == typeof e.getEntriesByType)
                        if ((r = e.getEntriesByType("navigation")) && r.length) {
                            BOOMR.info("This user agent supports NavigationTiming2", "nt");
                            r = r[0];
                            u = e.timing ? e.timing.navigationStart : 0
                        } else
                            r = undefined;
                    if (!r && e.timing) {
                        BOOMR.info("This user agent supports NavigationTiming", "nt");
                        r = e.timing
                    }
                    if (r) {
                        !(s = {
                            nt_nav_st: e.timing ? e.timing.navigationStart : 0,
                            nt_red_st: d(u, r.redirectStart),
                            nt_red_end: d(u, r.redirectEnd),
                            nt_fet_st: d(u, r.fetchStart),
                            nt_dns_st: d(u, r.domainLookupStart),
                            nt_dns_end: d(u, r.domainLookupEnd),
                            nt_con_st: d(u, r.connectStart),
                            nt_con_end: d(u, r.connectEnd),
                            nt_req_st: d(u, r.requestStart),
                            nt_res_st: d(u, r.responseStart),
                            nt_res_end: d(u, r.responseEnd),
                            nt_domloading: d(u, r.domLoading),
                            nt_domint: d(u, r.domInteractive),
                            nt_domcontloaded_st: d(u, r.domContentLoadedEventStart),
                            nt_domcontloaded_end: d(u, r.domContentLoadedEventEnd),
                            nt_domcomp: d(u, r.domComplete),
                            nt_load_st: d(u, r.loadEventStart),
                            nt_load_end: d(u, r.loadEventEnd),
                            nt_unload_st: d(u, r.unloadEventStart),
                            nt_unload_end: d(u, r.unloadEventEnd)
                        }).nt_domloading && e && e.timing && e.timing.domLoading && (s.nt_domloading = e.timing.domLoading);
                        r.secureConnectionStart && (s.nt_ssl_st = d(u, r.secureConnectionStart));
                        e.timing && e.timing.msFirstPaint && (s.nt_first_paint = e.timing.msFirstPaint);
                        r.workerStart && (s.nt_worker_start = d(u, r.workerStart));
                        if (r.decodedBodySize || r.transferSize) {
                            s.nt_enc_size = r.encodedBodySize;
                            s.nt_dec_size = r.decodedBodySize;
                            s.nt_trn_size = r.transferSize
                        }
                        r.nextHopProtocol && (s.nt_protocol = r.nextHopProtocol)
                    }
                    if (!s.nt_first_paint && BOOMR.plugins.PaintTiming) {
                        l = BOOMR.plugins.PaintTiming.is_supported();
                        (i = BOOMR.plugins.PaintTiming.getTimingFor("first-paint")) && (s.nt_first_paint = d(u, i))
                    }
                    if ((!s.nt_protocol || !s.nt_first_paint) && (!r || "" !== r.nextHopProtocol) && !l && a.chrome && "function" == typeof a.chrome.loadTimes && (n = a.chrome.loadTimes())) {
                        s.nt_spdy = n.wasFetchedViaSpdy ? 1 : 0;
                        s.nt_cinf = n.connectionInfo;
                        "number" == typeof n.firstPaintTime && 0 !== n.firstPaintTime && (s.nt_first_paint = Math.round(1e3 * n.firstPaintTime))
                    }
                    if (e.navigation) {
                        t = e.navigation;
                        s.nt_red_cnt = t.redirectCount;
                        s.nt_nav_type = t.type
                    }
                    for (o in s)
                        s.hasOwnProperty(o) && s[o] === undefined && delete s[o];
                    BOOMR.addVar(s, undefined, !0);
                    r && (r.requestStart && r.navigationStart && r.requestStart < r.navigationStart || r.responseStart && r.navigationStart && r.responseStart < r.navigationStart || r.responseStart && r.fetchStart && r.responseStart < r.fetchStart || r.navigationStart && r.fetchStart < r.navigationStart || r.responseEnd && r.responseEnd > BOOMR.now() + 864e5) && BOOMR.addVar("nt_bad", 1, !0);
                    0 < s.nt_load_end && (this.fullySent = !0)
                }
                c.sendBeacon()
            },
            clear: function(e) {
                this.complete = !(e && e.early) && this.fullySent
            },
            prerenderToVisible: function() {
                this.complete = !1;
                this.done()
            },
            onBeforeEarlyBeacon: function(e) {
                e && "undefined" != typeof e.initiator && "spa_hard" !== e.initiator || this.done()
            }
        };
        BOOMR.plugins.NavigationTiming = {
            init: function() {
                if (!c.initialized) {
                    BOOMR.subscribe("page_ready", c.done, null, c);
                    BOOMR.subscribe("prerender_to_visible", c.prerenderToVisible, null, c);
                    BOOMR.subscribe("before_early_beacon", c.onBeforeEarlyBeacon, null, c);
                    BOOMR.subscribe("xhr_load", c.xhr_done, null, c);
                    BOOMR.subscribe("before_unload", c.done, null, c);
                    BOOMR.subscribe("beacon", c.clear, null, c);
                    c.initialized = !0
                }
                return this
            },
            is_complete: function() {
                return !0
            }
        }
    }
    function d(e, t) {
        return "number" != typeof t || 0 === t ? undefined : Math.floor((e || 0) + t)
    }
}();
!function() {
    if (!BOOMR.plugins.ResourceTiming) {
        var B = {
            other: 0,
            img: 1,
            link: 2,
            script: 3,
            css: 4,
            xmlhttprequest: 5,
            html: 6,
            image: 7,
            beacon: 8,
            fetch: 9,
            iframe: "a",
            subdocument: "a",
            body: "b",
            input: "c",
            frame: "a",
            object: "d",
            video: "e",
            audio: "f",
            source: "g",
            track: "h",
            embed: "i",
            eventsource: "j",
            navigation: 6
        }
          , T = {
            prefetch: 1,
            preload: 2,
            prerender: 3,
            stylesheet: 4
        }
          , x = ["startTime", "redirectStart", "redirectEnd", "fetchStart", "domainLookupStart", "domainLookupEnd", "connectStart", "secureConnectionStart", "connectEnd", "requestStart", "responseStart", "responseEnd", "workerStart"]
          , v = "\n"
          , y = "*"
          , _ = "0"
          , b = "1"
          , w = "2"
          , k = 1
          , P = 2
          , N = 4
          , E = "3"
          , S = "4"
          , A = "5"
          , C = "6"
          , L = {
            complete: !1,
            sentNavBeacon: !1,
            initialized: !1,
            supported: null,
            xhr_load: function() {
                if (!this.complete) {
                    this.complete = !0;
                    BOOMR.sendBeacon()
                }
            },
            xssBreakWords: [/(h)(ref)/gi, /(s)(rc)/gi, /(a)(ction)/gi],
            urlLimit: 500,
            clearOnBeacon: !1,
            trimUrls: [],
            serverTiming: !0,
            monitorClearResourceTimings: !1,
            splitAtPath: !1,
            getSrcsetDimensions: !1,
            trackedResourceTypes: "*",
            done: function() {
                if (!this.sentNavBeacon) {
                    e();
                    this.complete = !0;
                    this.sentNavBeacon = !0;
                    BOOMR.sendBeacon()
                }
            },
            onBeacon: function(e) {
                var t = BOOMR.getPerformance();
                if (L.clearOnBeacon && t) {
                    var n = t.clearResourceTimings || t.webkitClearResourceTimings;
                    n && "function" == typeof n && n.call(t)
                }
            },
            prerenderToVisible: function() {
                this.sentNavBeacon = !1;
                this.done()
            }
        };
        BOOMR.plugins.ResourceTiming = {
            init: function(e) {
                BOOMR.utils.pluginConfig(L, e, "ResourceTiming", ["xssBreakWords", "clearOnBeacon", "urlLimit", "trimUrls", "trackedResourceTypes", "serverTiming", "monitorClearResourceTimings", "splitAtPath", "getSrcsetDimensions"]);
                if (L.initialized)
                    return this;
                if (this.is_supported()) {
                    BOOMR.subscribe("page_ready", L.done, null, L);
                    BOOMR.subscribe("prerender_to_visible", L.prerenderToVisible, null, L);
                    BOOMR.subscribe("xhr_load", L.xhr_load, null, L);
                    BOOMR.subscribe("beacon", L.onBeacon, null, L);
                    BOOMR.subscribe("before_unload", L.done, null, L);
                    if (L.monitorClearResourceTimings) {
                        var t = this;
                        BOOMR.window.performance.clearResourceTimings = (n = BOOMR.window.performance.clearResourceTimings,
                        function() {
                            t.addResources(BOOMR.window.performance.getEntriesByType("resource"));
                            n.apply(BOOMR.window.performance, arguments)
                        }
                        )
                    }
                } else
                    L.complete = !0;
                var n;
                L.initialized = !0;
                return this
            },
            is_complete: function() {
                return !0
            },
            is_enabled: function() {
                return L.initialized && this.is_supported()
            },
            is_supported: function() {
                if (null !== L.supported)
                    return L.supported;
                var e = BOOMR.getPerformance();
                L.supported = e && "function" == typeof e.getEntriesByType && "undefined" != typeof window.PerformanceResourceTiming;
                return L.supported
            },
            addResources: function(e, t) {
                if (this.is_supported() && BOOMR.utils.isArray(e)) {
                    L.collectedEntries = L.collectedEntries || [];
                    if ("number" == typeof t) {
                        var r = t - (BOOMR.window.performance.timeOrigin || BOOMR.window.performance.timing.navigationStart);
                        e = BOOMR.utils.arrayFilter(e, function(e) {
                            for (var t = 0; t < x.length; t++) {
                                var n = x[t];
                                e.hasOwnProperty(n) && (e[n] += r)
                            }
                            return !0
                        })
                    }
                    Array.prototype.push.apply(L.collectedEntries, e)
                }
            },
            getCompressedResourceTiming: r,
            getFilteredResourceTiming: q,
            calculateResourceTimingUnion: function l(e) {
                if (!e || !e.length)
                    return 0;
                e.sort(function(e, t) {
                    return e.fetchStart !== t.fetchStart ? e.fetchStart - t.fetchStart : (e.responseStart || e.responseEnd) - (t.responseStart || t.responseEnd)
                });
                for (var t = u(e), n = [], r = 0, i = 0; i < t.length; i++) {
                    var o = t[i];
                    o.fetchStart < r && (o.fetchStart = r);
                    if (o.fetchStart < o.responseEnd) {
                        n.push(o);
                        r = o.responseEnd
                    }
                }
                var a = u(n)
                  , s = 0;
                for (i = 0; i < a.length; i++)
                    s += a[i].responseEnd - a[i].fetchStart;
                return s
            },
            addResourceTimingToBeacon: e,
            addToBeacon: i
        }
    }
    function I(e, t) {
        var n, r, i, o, a, s, u, l, c = {};
        for (n in e) {
            r = n;
            for (i = 0; i < L.xssBreakWords.length; i++)
                r = r.replace(L.xssBreakWords[i], "$1" + v + "$2");
            if (e.hasOwnProperty(n)) {
                o = e[n];
                a = t ? [(a = r.split("/"))[0] + "//", a[2] + (3 < a.length ? "/" : "")].concat(a.slice(3).reduce(function d(o) {
                    return function(e, t, n) {
                        var r, i;
                        if (-1 !== t.indexOf(v)) {
                            r = t.split(v);
                            for (i = 0; i < r.length - 1; i++) {
                                e.push(r[i]);
                                e.push(v)
                            }
                            t = r.slice(-1)
                        }
                        "number" == typeof o && n < o && (t += "/");
                        return e.concat(t)
                    }
                }(a.length - 4), [])) : r.split("");
                u = c;
                for (i = 0; i < a.length; i++)
                    void 0 === (l = u[s = a[i]]) ? u = u[s] = i === a.length - 1 ? o : {} : "string" == typeof l ? u = u[s] = {
                        "|": l
                    } : i === a.length - 1 ? u[s]["|"] = o : u = u[s]
            }
        }
        return c
    }
    function F(e, t) {
        "number" != typeof e && (e = 0);
        "number" != typeof t && (t = 0);
        var n = Math.round(e || 0)
          , r = Math.round(t || 0);
        return 0 === n ? 0 : n - r
    }
    function V(e) {
        try {
            e.location && e.location.href;
            e.document;
            if ("performance"in e && e.performance)
                return 1
        } catch (t) {}
    }
    function U(e) {
        var t = 0;
        V(e) && e.performance.timing && e.performance.timing.navigationStart && (t = e.performance.timing.navigationStart);
        return t
    }
    function D(e, t, n, r, i) {
        var o, a, s, u, l, c, d, f, p, O, m, h = [], g = {}, R = {};
        void 0 === t && (t = !0);
        void 0 === n && (n = 0);
        void 0 === r && (r = 0);
        if (10 < r)
            return h;
        try {
            if (!V(e))
                return h;
            s = U(e);
            O = function w(e, t) {
                var l, c, d = {}, f = e.document, p = f.createElement("A");
                l = (t = t || [0, 0, 0, 0])[3] + (e.pageXOffset !== undefined) ? e.pageXOffset : (f.documentElement || f.body.parentNode || f.body).scrollLeft;
                c = t[2] + (e.pageYOffset !== undefined) ? e.pageYOffset : (f.documentElement || f.body.parentNode || f.body).scrollTop;
                ["img", "iframe", "image"].forEach(function(e) {
                    for (var t, n, r, i, o, a, s = f.getElementsByTagName(e), u = 0; u < s.length; u++)
                        if (t = s[u]) {
                            r = t.currentSrc || t.src || "function" == typeof t.getAttribute && t.getAttribute("src") || t.getAttribute("xlink:href");
                            p.href = r;
                            if ((r = p.href) && !d[r] && ((n = t.getBoundingClientRect()).height || t.offsetHeight) && (n.width || t.offsetWidth)) {
                                d[r] = [n.height || t.offsetHeight, n.width || t.offsetWidth, Math.round(n.top + c), Math.round(n.left + l)];
                                if (!t.naturalHeight && !t.naturalWidth)
                                    continue;
                                L.getSrcsetDimensions && t.currentSrc && (t.srcset || t.parentNode && t.parentNode.nodeName && "PICTURE" === t.parentNode.nodeName.toUpperCase()) ? (i = t.isConnected ? t.ownerDocument.createElement("IMG") : new BOOMR.window.Image).src = r : i = t;
                                o = i.naturalHeight || t.naturalHeight;
                                a = i.naturalWidth || t.naturalWidth;
                                !o && !a || d[r][0] === o && d[r][1] === a || d[r].push(o, a)
                            }
                        }
                });
                return d
            }(e, i);
            H(m = e.document.createElement("a"), g, "script");
            H(m, R, "link");
            if ((c = e.document.getElementsByTagName("iframe")) && c.length)
                for (o = 0; o < c.length; o++) {
                    u = U(c[o].contentWindow);
                    l = 0;
                    s < u && (l = n + (u - s));
                    m.href = c[o].src;
                    h = h.concat(D(c[o].contentWindow, !1, l, r + 1, O[m.href]))
                }
            if ("function" != typeof e.performance.getEntriesByType)
                return h;
            function M(e) {
                return L.serverTiming && e.serverTiming || []
            }
            if (t)
                if ((a = e.performance.getEntriesByType("navigation")) && 1 === a.length) {
                    d = a[0];
                    h.push({
                        name: e.location.href,
                        startTime: 0,
                        initiatorType: "html",
                        redirectStart: d.redirectStart,
                        redirectEnd: d.redirectEnd,
                        fetchStart: d.fetchStart,
                        domainLookupStart: d.domainLookupStart,
                        domainLookupEnd: d.domainLookupEnd,
                        connectStart: d.connectStart,
                        secureConnectionStart: d.secureConnectionStart,
                        connectEnd: d.connectEnd,
                        requestStart: d.requestStart,
                        responseStart: d.responseStart,
                        responseEnd: d.responseEnd,
                        workerStart: d.workerStart,
                        encodedBodySize: d.encodedBodySize,
                        decodedBodySize: d.decodedBodySize,
                        transferSize: d.transferSize,
                        serverTiming: M(d)
                    })
                } else
                    e.performance.timing && 0 !== (f = e.performance.timing).navigationStart && f.responseEnd <= f.navigationStart + 36e5 && h.push({
                        name: e.location.href,
                        startTime: 0,
                        initiatorType: "html",
                        redirectStart: f.redirectStart ? f.redirectStart - f.navigationStart : 0,
                        redirectEnd: f.redirectEnd ? f.redirectEnd - f.navigationStart : 0,
                        fetchStart: f.fetchStart ? f.fetchStart - f.navigationStart : 0,
                        domainLookupStart: f.domainLookupStart ? f.domainLookupStart - f.navigationStart : 0,
                        domainLookupEnd: f.domainLookupEnd ? f.domainLookupEnd - f.navigationStart : 0,
                        connectStart: f.connectStart ? f.connectStart - f.navigationStart : 0,
                        secureConnectionStart: f.secureConnectionStart ? f.secureConnectionStart - f.navigationStart : 0,
                        connectEnd: f.connectEnd ? f.connectEnd - f.navigationStart : 0,
                        requestStart: f.requestStart ? f.requestStart - f.navigationStart : 0,
                        responseStart: f.responseStart ? f.responseStart - f.navigationStart : 0,
                        responseEnd: f.responseEnd ? f.responseEnd - f.navigationStart : 0
                    });
            var B = e.performance.getEntriesByType("resource")
              , v = [];
            if (e === BOOMR.window && L.collectedEntries) {
                Array.prototype.push.apply(B, L.collectedEntries);
                L.collectedEntries = []
            }
            for (o = 0; B && o < B.length; o++) {
                f = B[o];
                p = {
                    name: f.name,
                    initiatorType: f.initiatorType,
                    encodedBodySize: f.encodedBodySize,
                    decodedBodySize: f.decodedBodySize,
                    transferSize: f.transferSize,
                    serverTiming: M(f),
                    visibleDimensions: O[f.name],
                    latestTime: function E(e) {
                        if (e.responseEnd)
                            return e.responseEnd;
                        if (e.responseStart && e.startTime)
                            return e.responseStart + .2 * (e.responseStart - e.startTime);
                        return Infinity
                    }(f)
                };
                for (var y = 0; y < x.length; y++) {
                    var _ = x[y];
                    p[_] = "startTime" === _ || f[_] ? f[_] + n : 0
                }
                f.hasOwnProperty("_data") && (p._data = f._data);
                if (("script" === f.initiatorType || "link" === f.initiatorType) && g[f.name]) {
                    var b = g[f.name];
                    p.scriptAttrs = (b.async ? k : 0) | (b.defer ? P : 0);
                    for (; 1 === b.nodeType && "BODY" !== b.nodeName; )
                        b = b.parentNode;
                    p.scriptAttrs |= "BODY" === b.nodeName ? N : 0
                }
                "link" === f.initiatorType && R[f.name] && BOOMR.utils.arrayFind(R[f.name].rel.split(/[\u0009\u000A\u000C\u000D\u0020]+/), function(e) {
                    e = e.toLowerCase();
                    if (T[e]) {
                        p.linkAttrs = T[e];
                        return !0
                    }
                });
                v.push(p)
            }
            h = h.concat(v)
        } catch (S) {
            return h
        }
        return h
    }
    function H(t, n, e) {
        Array.prototype.forEach.call(t.ownerDocument.getElementsByTagName(e), function(e) {
            t.href = e.currentSrc || e.src || "function" == typeof e.getAttribute && e.getAttribute("xlink:href") || e.href;
            t.href.match(/^https?:\/\//) && (n[t.href] = e)
        })
    }
    function X(e) {
        return "number" == typeof e && 0 !== e ? e.toString(36) : "string" == typeof e ? e : ""
    }
    function q(e, t, n) {
        var r, i = D(BOOMR.window, !0, 0, 0), o = U(BOOMR.window), a = {};
        if (!i || !i.length)
            return {
                entries: []
            };
        i.sort(function(e, t) {
            return e.startTime - t.startTime
        });
        for (var s = [], u = 0; u < i.length; u++)
            if ((0 === (r = i[u]).name.indexOf("http:") || 0 === r.name.indexOf("https:")) && !(-1 < r.name.indexOf(BOOMR.url) || -1 < r.name.indexOf(BOOMR.config_url) || "function" == typeof BOOMR.getBeaconURL && BOOMR.getBeaconURL() && -1 < r.name.indexOf(BOOMR.getBeaconURL()) || e && o + r.startTime < e)) {
                if (t && o + r.startTime > t)
                    break;
                if (void 0 === n || "*" === n || !n.length || r.initiatorType && BOOMR.utils.inArray(r.initiatorType, n)) {
                    !function c(r, e) {
                        (e || []).forEach(function(e) {
                            var t = e.name || e.metric;
                            "undefined" == typeof r[t] && (r[t] = {
                                count: 0,
                                counts: {}
                            });
                            var n = r[t];
                            n.counts[e.description] = n.counts[e.description] || 0;
                            n.counts[e.description]++;
                            n.count++
                        })
                    }(a, r.serverTiming);
                    s.push(r)
                }
            }
        var l = function d(r) {
            return Object.keys(r).sort(function(e, t) {
                return r[t].count - r[e].count
            }).reduce(function(e, n) {
                var t = Object.keys(r[n].counts).sort(function(e, t) {
                    return r[n].counts[t] - r[n].counts[e]
                });
                e.push(1 === t.length && "" === t[0] ? n : [n].concat(t));
                return e
            }, [])
        }(a);
        return {
            entries: s,
            serverTiming: {
                lookup: l,
                indexed: function f(e) {
                    return e.reduce(function(e, t, n) {
                        var r, i;
                        if (Array.isArray(t)) {
                            r = t[0];
                            i = t.slice(1).reduce(function(e, t, n) {
                                e[t] = n;
                                return e
                            }, {})
                        } else {
                            r = t;
                            i = {
                                "": 0
                            }
                        }
                        e[r] = {
                            index: n,
                            descriptions: i
                        };
                        return e
                    }, {})
                }(l)
            }
        }
    }
    function r(e, t) {
        var n, r, i, o, a, s = {}, u = {}, l = q(e, t, L.trackedResourceTypes), c = l.entries, d = l.serverTiming;
        if (!c || !c.length)
            return {
                restiming: {},
                servertiming: []
            };
        for (n = 0; n < c.length; n++) {
            r = c[n];
            void 0 === (i = B[r.initiatorType]) && (i = 0);
            a = i + [F(r.startTime, 0), F(r.responseEnd, r.startTime), F(r.responseStart, r.startTime), F(r.requestStart, r.startTime), F(r.connectEnd, r.startTime), F(r.secureConnectionStart, r.startTime), F(r.connectStart, r.startTime), F(r.domainLookupEnd, r.startTime), F(r.domainLookupStart, r.startTime), F(r.redirectEnd, r.startTime), F(r.redirectStart, r.startTime)].map(X).join(",").replace(/,+$/, "");
            var f = function h(e) {
                var t, n, r;
                if (e.encodedBodySize || e.decodedBodySize || e.transferSize) {
                    t = e.transferSize;
                    return [n = e.encodedBodySize, t ? t - n : "_", (r = e.decodedBodySize) ? r - n : 0].map(X).join(",").replace(/,+$/, "")
                }
                return ""
            }(r);
            "" !== f && (a += y + b + f);
            r.hasOwnProperty("scriptAttrs") && (a += y + w + r.scriptAttrs);
            r.serverTiming && r.serverTiming.length && (a += y + E + r.serverTiming.reduce(function(e, t, n) {
                var r = String("undefined" != typeof t.duration ? t.duration : t.value);
                "0." === r.substring(0, 2) && (r = r.substring(1));
                var i = t.name || t.metric;
                return e += (0 < n ? "," : "") + r + function o(e, t) {
                    var n = "";
                    e && (n += e);
                    t && (n += "." + t);
                    n.length && (n = ":" + n);
                    return n
                }(d.indexed[i].index, d.indexed[i].descriptions[t.description])
            }, ""));
            r.hasOwnProperty("linkAttrs") && (a += y + S + r.linkAttrs);
            if (r.workerStart && "number" == typeof r.workerStart && 0 !== r.workerStart) {
                var p = F(function g(e) {
                    "number" != typeof e && (e = 0);
                    return Math.ceil(e || 0)
                }(r.workerStart), r.startTime);
                a += y + C + X(p)
            }
            o = function R(e, t) {
                var n, r, i;
                if (e && t)
                    for (n = 0; n < t.length; n++)
                        if ("string" == typeof (i = t[n])) {
                            if (-1 !== (r = e.indexOf(i))) {
                                e = e.substr(0, r + i.length) + "...";
                                break
                            }
                        } else
                            i instanceof RegExp && i.test(e) && (e = e.replace(i, "$1") + "...");
                return BOOMR.utils.cleanupURL(e, L.urlLimit)
            }(r.name, L.trimUrls);
            if (r.hasOwnProperty("_data")) {
                var O = "";
                for (var m in r._data)
                    r._data.hasOwnProperty(m) && (O += y + A + m + ":" + r._data[m]);
                "undefined" == typeof s[o] ? s[o] = a + O : s[o] += O
            } else
                s[o] !== undefined ? s[o] += "|" + a : r.visibleDimensions ? s[o] = y + _ + r.visibleDimensions.map(Math.round).map(X).join(",").replace(/,+$/, "") + "|" + a : s[o] = a;
            if (r.visibleDimensions) {
                u[r.latestTime] || (u[r.latestTime] = []);
                u[r.latestTime].push(r.visibleDimensions)
            }
        }
        return {
            restiming: function M(e, t) {
                var n, r, i, o = 0, a = [];
                for (n in e)
                    e.hasOwnProperty(n) && a.push(n);
                for (var s = 0; s < a.length; s++) {
                    if ("object" == typeof e[n = a[s]] && (r = M(e[n], !1))) {
                        delete e[n];
                        if (n === v) {
                            n = r.name;
                            o++
                        } else
                            n += r.name;
                        e[n] = r.value
                    }
                    o++
                }
                if (1 !== o)
                    return !!t && e;
                if (t) {
                    (i = {})[n] = e[n];
                    return i
                }
                return {
                    name: n,
                    value: e[n]
                }
            }(I(s, L.splitAtPath), !0),
            servertiming: d.lookup
        }
    }
    function u(e) {
        var t = [];
        if (!e || !e.length)
            return t;
        for (var n = 0; n < e.length; n++) {
            var r = e[n];
            n !== e.length - 1 && r.fetchStart === e[n + 1].fetchStart || t.push({
                fetchStart: r.fetchStart,
                responseEnd: r.responseStart || r.responseEnd
            })
        }
        return t
    }
    function e(e, t) {
        var n;
        if ("undefined" != typeof JSON && (n = r(e, t))) {
            BOOMR.info("Client supports Resource Timing API", "restiming");
            i(n)
        }
    }
    function i(e) {
        BOOMR.addVar("restiming", JSON.stringify(e.restiming), !0);
        e.servertiming.length && BOOMR.addVar("servertiming", BOOMR.utils.serializeForUrl(e.servertiming), !0)
    }
}();
!function() {
    var t, n = {
        type: "ct",
        bandwidth: "bw",
        metered: "mt",
        effectiveType: "etype",
        downlinkMax: "lm",
        downlink: "dl",
        rtt: "rtt",
        saveData: "sd"
    };
    if ("function" == typeof BOOMR.addVar) {
        "object" == typeof navigator && (t = navigator.connection || navigator.mozConnection || navigator.webkitConnection || navigator.msConnection);
        if (t) {
            t.addEventListener && t.addEventListener("change", function() {
                e();
                BOOMR.fireEvent("netinfo", t)
            });
            e()
        }
    }
    function e() {
        var e;
        for (e in n)
            if ("undefined" != typeof t[e]) {
                BOOMR.removeVar("mob." + n[e]);
                t[e] && BOOMR.addVar("mob." + n[e], t[e])
            }
    }
}();
!function() {
    var i, u, o, a, s, l, c, d, f = {};
    if (!BOOMR.plugins.Memory) {
        d = {
            done: function() {
                if (i) {
                    BOOMR.removeVar("dom.res");
                    t(!0, function() {
                        var e, t, n = {};
                        if (f && "function" == typeof f.getEntriesByType && (e = f.getEntriesByType("resource")) && e.length) {
                            BOOMR.addVar("dom.res", e.length);
                            t = BOOMR.window.document.createElement("a");
                            [].forEach.call(e, function(e) {
                                t.href = e.name;
                                n[t.hostname] = !0
                            });
                            BOOMR.addVar("dom.doms", Object.keys(n).length)
                        }
                    }, "resources");
                    o && BOOMR.addVar({
                        "mem.total": o.totalJSHeapSize,
                        "mem.limit": o.jsHeapSizeLimit,
                        "mem.used": o.usedJSHeapSize
                    });
                    t(l && c, function() {
                        BOOMR.addVar({
                            "mem.lsln": l.length,
                            "mem.ssln": c.length
                        });
                        window.JSON && "function" == typeof JSON.stringify && BOOMR.addVar({
                            "mem.lssz": JSON.stringify(l).length,
                            "mem.sssz": JSON.stringify(c).length
                        })
                    }, "localStorage");
                    t(a, function() {
                        BOOMR.addVar({
                            "scr.xy": a.width + "x" + a.height,
                            "scr.bpp": a.colorDepth + "/" + (a.pixelDepth || "")
                        });
                        a.orientation && BOOMR.addVar("scr.orn", a.orientation.angle + "/" + a.orientation.type);
                        1 < i.devicePixelRatio && BOOMR.addVar("scr.dpx", i.devicePixelRatio);
                        var e = BOOMR.utils.scroll();
                        (e.x || e.y) && BOOMR.addVar("scr.sxy", e.x + "x" + e.y)
                    }, "screen");
                    t(s, function() {
                        s.hardwareConcurrency && BOOMR.addVar("cpu.cnc", s.hardwareConcurrency);
                        s.maxTouchPoints && BOOMR.addVar("scr.mtp", s.maxTouchPoints);
                        s.connection && s.connection.hasOwnProperty("saveData") && BOOMR.addVar("net.sd", s.connection.saveData ? 1 : 0)
                    }, "navigator");
                    t(!0, function() {
                        var t;
                        BOOMR.addVar({
                            "dom.ln": e("*"),
                            "dom.sz": u.documentElement.innerHTML.length,
                            "dom.ck": u.cookie.length
                        });
                        t = {};
                        BOOMR.addVar(e("img", ["dom.img", "dom.img.ext", "dom.img.uniq"], function(e) {
                            return e.src && !e.src.toLowerCase().match(/^(?:about:|javascript:|data:|#)/)
                        }, function(e) {
                            return !(t[e.currentSrc || e.src] = t.hasOwnProperty(e.currentSrc || e.src))
                        }));
                        t = {};
                        BOOMR.addVar(e("script", ["dom.script", "dom.script.ext", "dom.script.uniq"], function(e) {
                            return e.src && !e.src.toLowerCase().match(/^(?:about:|javascript:|#)/)
                        }, function(e) {
                            return !(t[e.src] = t.hasOwnProperty(e.src))
                        }));
                        t = {};
                        BOOMR.addVar(e("iframe", ["dom.iframe", "dom.iframe.ext", "dom.iframe.uniq"], function(e) {
                            return e.src && !e.src.toLowerCase().match(/^(?:about:|javascript:|#)/)
                        }, function(e) {
                            return !(t[e.src] = t.hasOwnProperty(e.src))
                        }));
                        t = {};
                        BOOMR.addVar(e("link", ["dom.link", "dom.link.css", "dom.link.css.uniq"], function(e) {
                            return e.rel && "stylesheet" === e.rel.toLowerCase() && e.href && !e.href.toLowerCase().match(/^(?:about:|javascript:|#)/)
                        }, function(e) {
                            return !(t[e.href] = t.hasOwnProperty(e.href))
                        }))
                    }, "dom")
                }
            }
        };
        BOOMR.plugins.Memory = {
            init: function() {
                var e;
                try {
                    i = BOOMR.window;
                    u = i.document;
                    f = BOOMR.getPerformance();
                    e = i.console;
                    a = i.screen;
                    s = i.navigator;
                    try {
                        l = i.localStorage;
                        c = i.sessionStorage
                    } catch (n) {}
                    if (s && s.battery)
                        s.battery;
                    else if (s && "function" == typeof s.getBattery) {
                        var t = s.getBattery();
                        t && "function" == typeof t.then ? t.then(function(e) {
                            0
                        }) : "object" == typeof t && t.hasOwnProperty("level") && 0
                    }
                } catch (r) {
                    BOOMR.addError(r, "Memory.init")
                }
                o = f && f.memory ? f.memory : e && e.memory ? e.memory : null;
                if (d.initialized)
                    return this;
                d.initialized = !0;
                BOOMR.subscribe("before_beacon", d.done, null, d);
                return this
            },
            is_complete: function() {
                return !0
            }
        }
    }
    function e(e, t) {
        var n, r, i, o, a;
        try {
            r = (n = u.getElementsByTagName(e)).length;
            if (t && t.length) {
                (i = {})[t[0]] = r;
                for (o = 2; 0 < r && o < arguments.length && o - 1 < t.length; o++)
                    if ("function" == typeof (a = arguments[o]))
                        try {
                            if ((n = BOOMR.utils.arrayFilter(n, a)).length !== r) {
                                r = n.length;
                                i[t[o - 1]] = r
                            }
                        } catch (s) {
                            BOOMR.addError(s, "Memory.nodeList." + e + ".filter[" + (o - 2) + "]")
                        }
            }
            return i || r
        } catch (s) {
            BOOMR.addError(s, "Memory.nodeList." + e);
            return 0
        }
    }
    function t(e, t, n) {
        if (e)
            try {
                t()
            } catch (r) {
                BOOMR.addError(r, "Memory.done." + n)
            }
    }
}();
!function() {
    if (!BOOMR.plugins.CACHE_RELOAD) {
        var n = {
            url: ""
        };
        BOOMR.plugins.CACHE_RELOAD = {
            init: function(e) {
                BOOMR.utils.pluginConfig(n, e, "CACHE_RELOAD", ["url"]);
                if (!n.url)
                    return this;
                var t = document.createElement("iframe");
                t.style.display = "none";
                t.src = n.url;
                document.body.appendChild(t);
                return this
            },
            is_complete: function() {
                return !0
            }
        }
    }
}();
!function() {
    BOOMR.utils = BOOMR.utils || {};
    if (!BOOMR.utils || !BOOMR.utils.Compression) {
        var a = BOOMR.utils.Compression = {};
        a.jsUrl = function s(e) {
            function t(e) {
                return /[^\w-.]/.test(e) ? e = e.replace(/[^\w-.]/g, function(e) {
                    return "$" === e ? "!" : (e = e.charCodeAt(0)) < 256 ? "*" + ("00" + e.toString(16)).slice(-2) : "**" + ("0000" + e.toString(16)).slice(-4)
                }) : e
            }
            var n = [];
            switch (typeof e) {
            case "number":
                return isFinite(e) ? "~" + e : "~null";
            case "string":
                return "~'" + t(e);
            case "boolean":
                return "~" + e;
            case "object":
                if (!e)
                    return "~null";
                if (BOOMR.utils.isArray(e)) {
                    for (var r = 0; r < e.length; r++)
                        r in e && (n[r] = a.jsUrl(e[r]) || "~null");
                    return "~(" + (n.join("") || "~") + ")"
                }
                for (var i in e)
                    if (e.hasOwnProperty(i)) {
                        var o = a.jsUrl(e[i]);
                        o && n.push(t(i) + o)
                    }
                return "~(" + n.sort().join("~") + ")";
            default:
                return undefined
            }
        }
    }
}();
!function(e) {
    "use strict";
    e.ErrorStackParser = function ErrorStackParser() {
        "use strict";
        var n = /(^|@)\S+\:\d+/
          , r = /^\s*at .*(\S+\:\d+|\(native\))/m
          , i = /^(eval@)?(\[native code\])?$/;
        function o(e, t, n) {
            if (typeof Array.prototype.map === "function") {
                return e.map(t, n)
            } else {
                var r = new Array(e.length);
                for (var i = 0; i < e.length; i++) {
                    r[i] = t.call(n, e[i])
                }
                return r
            }
        }
        function a(e, t, n) {
            if (typeof Array.prototype.filter === "function") {
                return e.filter(t, n)
            } else {
                var r = [];
                for (var i = 0; i < e.length; i++) {
                    if (t.call(n, e[i])) {
                        r.push(e[i])
                    }
                }
                return r
            }
        }
        return {
            parse: function t(e) {
                if (typeof e.stacktrace !== "undefined" || typeof e["opera#sourceloc"] !== "undefined") {
                    return this.parseOpera(e)
                } else if (e.stack && e.stack.match(r)) {
                    return this.parseV8OrIE(e)
                } else if (e.stack) {
                    return this.parseFFOrSafari(e)
                } else {
                    throw new Error("Cannot parse given Error object")
                }
            },
            extractLocation: function s(e) {
                if (e.indexOf(":") === -1) {
                    return [e]
                }
                var t = e.replace(/[\(\)\s]/g, "").split(":");
                var n = t.pop();
                var r = t[t.length - 1];
                if (!isNaN(parseFloat(r)) && isFinite(r)) {
                    var i = t.pop();
                    return [t.join(":"), i, n]
                } else {
                    return [t.join(":"), n, undefined]
                }
            },
            parseV8OrIE: function u(e) {
                var t = a(e.stack.split("\n"), function(e) {
                    return !!e.match(r)
                }, this);
                return o(t, function(e) {
                    if (e.indexOf("(eval ") > -1) {
                        e = e.replace(/eval code/g, "eval").replace(/(\(eval at [^\()]*)|(\)\,.*$)/g, "")
                    }
                    var t = e.replace(/^\s+/, "").replace(/\(eval code/g, "(").split(/\s+/).slice(1);
                    var n = this.extractLocation(t.pop());
                    var r = t.join(" ") || undefined;
                    var i = n[0] === "eval" ? undefined : n[0];
                    return {
                        functionName: r,
                        fileName: i,
                        lineNumber: n[1],
                        columnNumber: n[2],
                        source: e
                    }
                }, this)
            },
            parseFFOrSafari: function l(e) {
                var t = a(e.stack.split("\n"), function(e) {
                    return !e.match(i)
                }, this);
                return o(t, function(e) {
                    if (e.indexOf(" > eval") > -1) {
                        e = e.replace(/ line (\d+)(?: > eval line \d+)* > eval\:\d+\:\d+/g, ":$1")
                    }
                    if (e.indexOf("@") === -1 && e.indexOf(":") === -1) {
                        return {
                            functionName: e
                        }
                    } else {
                        var t = e.split("@");
                        var n = this.extractLocation(t.pop());
                        var r = t.join("@") || undefined;
                        return {
                            functionName: r,
                            fileName: n[0],
                            lineNumber: n[1],
                            columnNumber: n[2],
                            source: e
                        }
                    }
                }, this)
            },
            parseOpera: function c(e) {
                if (!e.stacktrace || e.message.indexOf("\n") > -1 && e.message.split("\n").length > e.stacktrace.split("\n").length) {
                    return this.parseOpera9(e)
                } else if (!e.stack) {
                    return this.parseOpera10(e)
                } else {
                    return this.parseOpera11(e)
                }
            },
            parseOpera9: function d(e) {
                var t = /Line (\d+).*script (?:in )?(\S+)/i;
                var n = e.message.split("\n");
                var r = [];
                for (var i = 2, o = n.length; i < o; i += 2) {
                    var a = t.exec(n[i]);
                    if (a) {
                        r.push({
                            fileName: a[2],
                            lineNumber: a[1],
                            source: n[i]
                        })
                    }
                }
                return r
            },
            parseOpera10: function f(e) {
                var t = /Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i;
                var n = e.stacktrace.split("\n");
                var r = [];
                for (var i = 0, o = n.length; i < o; i += 2) {
                    var a = t.exec(n[i]);
                    if (a) {
                        r.push({
                            functionName: a[3] || undefined,
                            fileName: a[2],
                            lineNumber: a[1],
                            source: n[i]
                        })
                    }
                }
                return r
            },
            parseOpera11: function p(e) {
                var t = a(e.stack.split("\n"), function(e) {
                    return !!e.match(n) && !e.match(/^Error created at/)
                }, this);
                return o(t, function(e) {
                    var t = e.split("@");
                    var n = this.extractLocation(t.pop());
                    var r = t.shift() || "";
                    var i = r.replace(/<anonymous function(: (\w+))?>/, "$2").replace(/\([^\)]*\)/g, "") || undefined;
                    var o;
                    if (r.match(/\(([^\)]*)\)/)) {
                        o = r.replace(/^[^\(]+\(([^\)]*)\)$/, "$1")
                    }
                    var a = o === undefined || o === "[arguments not available]" ? undefined : o.split(",");
                    return {
                        functionName: i,
                        args: a,
                        fileName: n[0],
                        lineNumber: n[1],
                        columnNumber: n[2],
                        source: e
                    }
                }, this)
            }
        }
    }()
}(this, function ErrorStackParser() {
    "use strict";
    var n = /(^|@)\S+\:\d+/
      , r = /^\s*at .*(\S+\:\d+|\(native\))/m
      , i = /^(eval@)?(\[native code\])?$/;
    function o(e, t, n) {
        if (typeof Array.prototype.map === "function") {
            return e.map(t, n)
        } else {
            var r = new Array(e.length);
            for (var i = 0; i < e.length; i++) {
                r[i] = t.call(n, e[i])
            }
            return r
        }
    }
    function a(e, t, n) {
        if (typeof Array.prototype.filter === "function") {
            return e.filter(t, n)
        } else {
            var r = [];
            for (var i = 0; i < e.length; i++) {
                if (t.call(n, e[i])) {
                    r.push(e[i])
                }
            }
            return r
        }
    }
    return {
        parse: function t(e) {
            if (typeof e.stacktrace !== "undefined" || typeof e["opera#sourceloc"] !== "undefined") {
                return this.parseOpera(e)
            } else if (e.stack && e.stack.match(r)) {
                return this.parseV8OrIE(e)
            } else if (e.stack) {
                return this.parseFFOrSafari(e)
            } else {
                throw new Error("Cannot parse given Error object")
            }
        },
        extractLocation: function s(e) {
            if (e.indexOf(":") === -1) {
                return [e]
            }
            var t = e.replace(/[\(\)\s]/g, "").split(":");
            var n = t.pop();
            var r = t[t.length - 1];
            if (!isNaN(parseFloat(r)) && isFinite(r)) {
                var i = t.pop();
                return [t.join(":"), i, n]
            } else {
                return [t.join(":"), n, undefined]
            }
        },
        parseV8OrIE: function u(e) {
            var t = a(e.stack.split("\n"), function(e) {
                return !!e.match(r)
            }, this);
            return o(t, function(e) {
                if (e.indexOf("(eval ") > -1) {
                    e = e.replace(/eval code/g, "eval").replace(/(\(eval at [^\()]*)|(\)\,.*$)/g, "")
                }
                var t = e.replace(/^\s+/, "").replace(/\(eval code/g, "(").split(/\s+/).slice(1);
                var n = this.extractLocation(t.pop());
                var r = t.join(" ") || undefined;
                var i = n[0] === "eval" ? undefined : n[0];
                return {
                    functionName: r,
                    fileName: i,
                    lineNumber: n[1],
                    columnNumber: n[2],
                    source: e
                }
            }, this)
        },
        parseFFOrSafari: function l(e) {
            var t = a(e.stack.split("\n"), function(e) {
                return !e.match(i)
            }, this);
            return o(t, function(e) {
                if (e.indexOf(" > eval") > -1) {
                    e = e.replace(/ line (\d+)(?: > eval line \d+)* > eval\:\d+\:\d+/g, ":$1")
                }
                if (e.indexOf("@") === -1 && e.indexOf(":") === -1) {
                    return {
                        functionName: e
                    }
                } else {
                    var t = e.split("@");
                    var n = this.extractLocation(t.pop());
                    var r = t.join("@") || undefined;
                    return {
                        functionName: r,
                        fileName: n[0],
                        lineNumber: n[1],
                        columnNumber: n[2],
                        source: e
                    }
                }
            }, this)
        },
        parseOpera: function c(e) {
            if (!e.stacktrace || e.message.indexOf("\n") > -1 && e.message.split("\n").length > e.stacktrace.split("\n").length) {
                return this.parseOpera9(e)
            } else if (!e.stack) {
                return this.parseOpera10(e)
            } else {
                return this.parseOpera11(e)
            }
        },
        parseOpera9: function d(e) {
            var t = /Line (\d+).*script (?:in )?(\S+)/i;
            var n = e.message.split("\n");
            var r = [];
            for (var i = 2, o = n.length; i < o; i += 2) {
                var a = t.exec(n[i]);
                if (a) {
                    r.push({
                        fileName: a[2],
                        lineNumber: a[1],
                        source: n[i]
                    })
                }
            }
            return r
        },
        parseOpera10: function f(e) {
            var t = /Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i;
            var n = e.stacktrace.split("\n");
            var r = [];
            for (var i = 0, o = n.length; i < o; i += 2) {
                var a = t.exec(n[i]);
                if (a) {
                    r.push({
                        functionName: a[3] || undefined,
                        fileName: a[2],
                        lineNumber: a[1],
                        source: n[i]
                    })
                }
            }
            return r
        },
        parseOpera11: function p(e) {
            var t = a(e.stack.split("\n"), function(e) {
                return !!e.match(n) && !e.match(/^Error created at/)
            }, this);
            return o(t, function(e) {
                var t = e.split("@");
                var n = this.extractLocation(t.pop());
                var r = t.shift() || "";
                var i = r.replace(/<anonymous function(: (\w+))?>/, "$2").replace(/\([^\)]*\)/g, "") || undefined;
                var o;
                if (r.match(/\(([^\)]*)\)/)) {
                    o = r.replace(/^[^\(]+\(([^\)]*)\)$/, "$1")
                }
                var a = o === undefined || o === "[arguments not available]" ? undefined : o.split(",");
                return {
                    functionName: i,
                    args: a,
                    fileName: n[0],
                    lineNumber: n[1],
                    columnNumber: n[2],
                    source: e
                }
            }, this)
        }
    }
});
!function() {
    var f;
    if (!BOOMR.plugins.Errors) {
        var p = ["BOOMR_addError", "createStackForSend", "BOOMR.window.console.error", "BOOMR.plugins.Errors.init", "BOOMR.window.onerror", "BOOMR_plugins_errors_"]
          , O = ["Object.send", "b.send", "wrap", "Anonymous function"]
          , m = ["/boomerang"];
        h.prototype.equals = function(e) {
            return "object" == typeof e && (this.code === e.code && (this.message === e.message && (this.functionName === e.functionName && (this.fileName === e.fileName && (this.lineNumber === e.lineNumber && (this.columnNumber === e.columnNumber && (this.stack === e.stack && (this.type === e.type && this.source === e.source))))))))
        }
        ;
        h.fromError = function(e, t, n) {
            var r, i, o, a, s, u, l, c, d = !1, f = BOOMR.now();
            if (!e)
                return null;
            if (e.stack) {
                5e3 < e.stack.length && (e.stack = e.stack.substr(0, 5e3));
                if ((i = ErrorStackParser.parse(e)) && i.length) {
                    if (e.generatedStack) {
                        if (4 <= i.length && i[1].functionName && -1 !== i[1].functionName.indexOf("createStackForSend")) {
                            i = i.slice(3);
                            d = !0
                        }
                        if (3 <= i.length && i[0].functionName && -1 !== i[0].functionName.indexOf("createStackForSend")) {
                            i = i[1].fileName === i[2].fileName ? i.slice(3) : i.slice(2);
                            d = !0
                        }
                        if (1 <= i.length && i[0].functionName && -1 !== i[0].functionName.indexOf("BOOMR_plugins_errors")) {
                            i = i.slice(1);
                            d = !0
                        }
                    }
                    for (o = 0; o < i.length; o++) {
                        u = !1;
                        if (c = (l = i[o]).functionName) {
                            for (a = 0; a < p.length; a++)
                                if (-1 !== c.indexOf(p[a])) {
                                    i.splice(o, 1);
                                    o--;
                                    u = d = !0;
                                    break
                                }
                            if (!u && l.fileName)
                                for (a = 0; a < m.length; a++)
                                    if (-1 !== l.fileName.indexOf(m[a]))
                                        for (s = 0; s < O.length; s++)
                                            if (-1 !== c.indexOf(O[s])) {
                                                i.splice(o, 1);
                                                o--;
                                                u = d = !0;
                                                break
                                            }
                        }
                    }
                    if (i.length) {
                        r = i[0];
                        !d && "undefined" != typeof e.lineNumber || (e.lineNumber = r.lineNumber);
                        !d && "undefined" != typeof e.columnNumber || (e.columnNumber = r.columnNumber);
                        !d && "undefined" != typeof e.functionName || (e.functionName = r.functionName);
                        !d && "undefined" != typeof e.fileName || (e.fileName = r.fileName)
                    }
                    e.stack && (e.stack = e.stack.replace(/\s\s+/g, " "))
                }
            } else
                (e.functionName || e.fileName || e.lineNumber || e.columnNumber) && (i = [{
                    lineNumber: e.lineNumber,
                    columnNumber: e.columnNumber,
                    fileName: e.fileName,
                    functionName: e.functionName
                }]);
            "string" == typeof e.message && "function" == typeof e.message.indexOf && -1 !== e.message.indexOf("ReferenceError:") && "Error" === e.name && (e.name = "ReferenceError");
            return new h({
                code: e.code ? e.code : undefined,
                message: e.message ? e.message : undefined,
                functionName: e.functionName ? e.functionName : undefined,
                fileName: e.fileName ? e.fileName : undefined,
                lineNumber: e.lineNumber ? e.lineNumber : undefined,
                columnNumber: e.columnNumber ? e.columnNumber : undefined,
                stack: e.stack ? e.stack : undefined,
                type: e.name ? e.name : undefined,
                source: n,
                via: t,
                frames: i,
                extra: e.extra ? e.extra : undefined,
                timestamp: e.timestamp ? e.timestamp : f
            })
        }
        ;
        f = {
            onError: undefined,
            monitorGlobal: !0,
            monitorNetwork: !0,
            monitorConsole: !0,
            monitorEvents: !1,
            monitorTimeout: !1,
            monitorRejections: !1,
            monitorReporting: !1,
            sendAfterOnload: !1,
            maxErrors: 10,
            sendInterval: 1e3,
            sendIntervalDuringLoad: 2500,
            sendIntervalId: -1,
            maxEvents: 10,
            isDuringLoad: !0,
            initialized: !1,
            autorun: !0,
            errors: [],
            q: [],
            events: [],
            reportingObserver: undefined,
            send: function(t, n, r) {
                var i = BOOMR.now();
                if (t && !0 !== t.reported) {
                    t.reported = !0;
                    n = n || BOOMR.plugins.Errors.VIA_APP;
                    r = r || BOOMR.plugins.Errors.SOURCE_APP;
                    if (t.stack || t.noStack) {
                        t.timestamp = t.timestamp || i;
                        f.addError(t, n, r)
                    } else {
                        !function createStackForSend() {
                            try {
                                throw Error(t)
                            } catch (e) {
                                (t = e).generatedStack = !0;
                                t.timestamp = t.timestamp || i;
                                f.addError(t, n, r)
                            }
                        }()
                    }
                }
            },
            addError: function(e, t, n) {
                var r, i, o, a = BOOMR.now();
                if (f.isDuringLoad || f.sendAfterOnload) {
                    if (f.onError) {
                        try {
                            r = f.onError(e)
                        } catch (s) {
                            r = !1
                        }
                        if (!r)
                            return
                    }
                    if (!(f.errors.length >= f.maxErrors)) {
                        i = h.fromError(e, t, n);
                        o = f.mergeDuplicateErrors(f.errors, i, !1);
                        BOOMR.fireEvent("error", o || i);
                        f.mergeDuplicateErrors(f.q, i, !0);
                        if ((BOOMR.hasSentPageLoadBeacon() || !f.autorun) && -1 === f.sendIntervalId) {
                            if (o)
                                return;
                            f.sendIntervalId = setTimeout(function() {
                                f.sendIntervalId = -1;
                                0 !== f.q.length && BOOMR.sendBeaconWhenReady({
                                    "rt.start": "manual",
                                    "http.initiator": "error",
                                    api: 1,
                                    "rt.tstart": a,
                                    "rt.end": a
                                }, function() {
                                    f.addErrorsToBeacon()
                                }, this)
                            }, f.isDuringLoad ? f.sendIntervalDuringLoad : f.sendInterval)
                        }
                    }
                }
            },
            findDuplicateError: function(e, t) {
                if (!BOOMR.utils.isArray(e) || void 0 === t)
                    return undefined;
                for (var n = 0; n < e.length; n++)
                    if (e[n].equals(t))
                        return e[n];
                return undefined
            },
            mergeDuplicateErrors: function(e, t, n) {
                if (!BOOMR.utils.isArray(e) || void 0 === t)
                    return undefined;
                var r = f.findDuplicateError(e, t);
                if (r) {
                    n && (r.count += t.count);
                    return r
                }
                e.push(t);
                return undefined
            },
            pageReady: function() {
                f.isDuringLoad = !1
            },
            getErrors: function() {
                return 0 !== f.errors.length && f.errors
            },
            getErrorsForUrl: function(e) {
                e = f.compressErrors(e);
                return BOOMR.utils.serializeForUrl(e)
            },
            addErrorsToBeacon: function() {
                if (f.q.length) {
                    var e = this.getErrorsForUrl(f.q);
                    e && BOOMR.addVar("err", e, !0);
                    f.q = []
                }
            },
            beforeBeacon: function(e) {
                e && "undefined" != typeof e.early || f.addErrorsToBeacon()
            },
            wrapFn: function(o, a, s, u, l) {
                var c, d = a[o];
                if ("function" == typeof d) {
                    "addEventListener" === o && (c = a.removeEventListener);
                    BOOMR.utils.overwriteNative(a, o, function BOOMR_plugins_errors_wrapped_function() {
                        try {
                            var e = Array.prototype.slice.call(arguments)
                              , t = e[u]
                              , n = s ? this === window ? BOOMR.window : this : a
                              , r = f.wrap(t, n, l);
                            e[u] = r;
                            if ("addEventListener" === o) {
                                if (!f.trackFn(n, e[0], t, e[2], r))
                                    return;
                                c && c.apply(n, arguments)
                            }
                            return d.apply(n, e)
                        } catch (i) {
                            f.send(i, l);
                            throw i
                        }
                    })
                }
            },
            trackFn: function(e, t, n, r, i) {
                if (!e)
                    return !1;
                if (-1 !== f.trackedFnIdx(e, t, n, r))
                    return !1;
                e._bmrEvents || (e._bmrEvents = []);
                r = !0 === (r && r.capture || r);
                e._bmrEvents.push([t, n, r, i]);
                return !0
            },
            trackedFnIdx: function(e, t, n, r) {
                var i, o;
                if (e) {
                    e._bmrEvents || (e._bmrEvents = []);
                    r = !0 === (r && r.capture || r);
                    for (i = 0; i < e._bmrEvents.length; i++)
                        if ((o = e._bmrEvents[i])[0] === t && o[1] === n && o[2] === r)
                            return i;
                    return -1
                }
            },
            wrapRemoveEventListener: function(e) {
                var i, o, t = "removeEventListener", a = e[t];
                "function" == typeof a && BOOMR.utils.overwriteNative(e, t, function BOOMR_plugins_errors_wrapped_removeEventListener(e, t, n) {
                    var r = this === window ? BOOMR.window : this;
                    if (-1 !== (i = f.trackedFnIdx(r, e, t, n))) {
                        o = r._bmrEvents[i][3];
                        a.call(r, e, o, n);
                        r._bmrEvents.splice(i, 1)
                    } else
                        a.call(r, e, t, n)
                })
            },
            wrap: function(t, n, r) {
                if ("function" != typeof t)
                    return t;
                r = r || BOOMR.plugins.Errors.VIA_APP;
                BOOMR_check_doc_domain();
                return function BOOMR_plugins_errors_wrap() {
                    try {
                        return t.apply(n, arguments)
                    } catch (e) {
                        if (-2146823277 === e.number && (r === BOOMR.plugins.Errors.VIA_EVENTHANDLER || r === BOOMR.plugins.Errors.VIA_TIMEOUT))
                            return;
                        BOOMR.isUnloaded || f.send(e, r);
                        throw e
                    }
                }
            },
            test: function() {
                var e, t;
                if (0 === arguments.length)
                    return undefined;
                if ("function" != typeof (e = arguments[0]))
                    return undefined;
                t = 1 < arguments.length ? arguments[1] : BOOMR.window;
                var n = Array.prototype.slice.call(arguments, 2);
                return f.wrap(e, t).apply(t, n)
            },
            normalizeToString: function(e) {
                return void 0 === e ? "undefined" : null === e ? "null" : "number" == typeof e && isNaN(e) ? "NaN" : "" === e ? "(empty string)" : 0 === e ? "0" : e ? "function" == typeof e ? "(function)" : e && "function" == typeof e.toString ? e.toString() : "(unknown)" : "false"
            },
            compressErrors: function(e) {
                for (var t, n, r, i, o, a, s, u = 0, l = BOOMR.window.location.origin, c = 0; c < e.length; c++) {
                    s = {};
                    1 !== (n = e[c]).count && (s.n = n.count);
                    if ("number" == typeof n.timestamp) {
                        u = n.timestamp;
                        s.d = n.timestamp.toString(36)
                    }
                    if (n.frames.length) {
                        s.f = [];
                        for (t = 0; t < n.frames.length; t++) {
                            (r = n.frames[t]).lineNumber && (r.lineNumber = parseInt(r.lineNumber, 10));
                            r.columnNumber && (r.columnNumber = parseInt(r.columnNumber, 10));
                            o = {
                                l: r.lineNumber,
                                c: r.columnNumber
                            };
                            "string" == typeof r.fileName && (-1 !== r.fileName.indexOf(l) ? o.wo = r.fileName.replace(l, "") : o.w = r.fileName);
                            "string" == typeof r.functionName && (o.f = r.functionName);
                            s.f.push(o)
                        }
                    }
                    if (n.events.length) {
                        s.e = [];
                        for (t = 0; t < n.events.length; t++) {
                            a = {
                                t: (i = n.events[t]).type,
                                d: u ? u - i.timestamp : i.timestamp
                            };
                            if (i.type === BOOMR.plugins.Errors.EVENT_CLICK) {
                                i.id && (a.i = i.id);
                                i.name && (a.n = i.name);
                                i.tagName && (a.g = i.tagName)
                            } else if (i.type === BOOMR.plugins.Errors.EVENT_NETWORK) {
                                i.url && (a.u = i.url);
                                i.method && (a.m = i.method);
                                i.result && (a.r = i.result)
                            } else if (i.type === BOOMR.plugins.Errors.EVENT_LOG) {
                                i.severity && (a.s = i.severity);
                                i.message && (a.m = i.message)
                            }
                            s.e.push(a)
                        }
                    }
                    n.source !== BOOMR.plugins.Errors.SOURCE_APP && (s.s = n.source);
                    "undefined" != typeof n.via && n.via !== BOOMR.plugins.Errors.VIA_APP && (s.v = n.via);
                    "undefined" != typeof n.type && "Error" !== n.type && (s.t = n.type);
                    n.code && (s.c = n.code);
                    n.message && (s.m = n.message);
                    n.extra && (s.x = n.extra);
                    e[c] = s
                }
                return e
            }
        };
        var s = BOOMR.plugins.Errors = {
            init: function(e) {
                var n, r;
                BOOMR.utils.pluginConfig(f, e, "Errors", ["onError", "monitorGlobal", "monitorNetwork", "monitorConsole", "monitorEvents", "monitorTimeout", "monitorReporting", "monitorRejections", "sendAfterOnload", "sendInterval", "maxErrors"]);
                if (f.initialized)
                    return this;
                e && "undefined" != typeof e.autorun && (f.autorun = e.autorun);
                f.initialized = !0;
                BOOMR.subscribe("before_beacon", f.beforeBeacon, null, f);
                BOOMR.subscribe("page_ready", f.pageReady, null, f);
                BOOMR.registerEvent("error");
                if (f.monitorGlobal)
                    try {
                        (!BOOMR.globalOnError || BOOMR.window.onerror && !BOOMR.window.onerror._bmr) && (BOOMR.globalOnError = BOOMR.window.onerror);
                        BOOMR.utils.overwriteNative(BOOMR.window, "onerror", function BOOMR_plugins_errors_onerror(e, t, n, r, i) {
                            void 0 === i && "object" == typeof e && "object" == typeof e.error && null !== e.error && (i = e.error);
                            null != i ? f.send(i, s.VIA_GLOBAL_EXCEPTION_HANDLER) : f.send({
                                message: e,
                                fileName: t,
                                lineNumber: n,
                                columnNumber: r,
                                noStack: !0
                            }, s.VIA_GLOBAL_EXCEPTION_HANDLER);
                            return "function" == typeof BOOMR.globalOnError && BOOMR.globalOnError.apply(BOOMR.window, arguments)
                        });
                        if (BOOMR.globalErrors) {
                            for (var i = 0; i < BOOMR.globalErrors.length; i++)
                                f.send(BOOMR.globalErrors[i], s.VIA_GLOBAL_EXCEPTION_HANDLER);
                            delete BOOMR.globalErrors
                        }
                    } catch (t) {}
                f.monitorNetwork && BOOMR.subscribe("xhr_error", function BOOMR_plugins_errors_onxhrerror(e) {
                    f.send({
                        code: e.status,
                        message: e.url,
                        noStack: !0
                    }, s.VIA_NETWORK)
                });
                f.monitorRejections && BOOMR.window.PromiseRejectionEvent && BOOMR.utils.addListener(BOOMR.window, "unhandledrejection", function o(e) {
                    var t, n = "Unhandled Promise Rejection";
                    if (e && e.reason) {
                        if ("string" == typeof e.reason)
                            n = e.reason;
                        else {
                            "string" == typeof e.reason.stack && (t = e.reason.stack);
                            n = "undefined" == typeof e.reason.message ? f.normalizeToString(e.reason) : f.normalizeToString(e.reason.message)
                        }
                        f.send({
                            message: n,
                            stack: t,
                            noStack: !t
                        }, s.VIA_REJECTION)
                    }
                }, !0);
                if (f.monitorConsole) {
                    BOOMR.window.console || (BOOMR.window.console = {});
                    BOOMR.globalConsole = BOOMR.window.console.error;
                    try {
                        BOOMR.utils.overwriteNative(BOOMR.window.console, "error", function BOOMR_plugins_errors_console_error() {
                            var e = Array.prototype.slice.call(arguments);
                            1 === e.length ? f.send(f.normalizeToString(e[0]), s.VIA_CONSOLE) : f.send(f.normalizeToString(e), s.VIA_CONSOLE);
                            "function" == typeof BOOMR.globalConsole && ("function" == typeof BOOMR.globalConsole.apply ? BOOMR.globalConsole.apply(this, e) : BOOMR.globalConsole(e[0], e[1], e[2]))
                        })
                    } catch (a) {}
                }
                if (f.monitorEvents)
                    if (BOOMR.window.EventTarget) {
                        f.wrapFn("addEventListener", BOOMR.window.EventTarget.prototype, !0, 1, s.VIA_EVENTHANDLER);
                        f.wrapRemoveEventListener(BOOMR.window.EventTarget.prototype)
                    } else {
                        if (BOOMR.window) {
                            f.wrapFn("addEventListener", BOOMR.window, !1, 1, s.VIA_EVENTHANDLER);
                            f.wrapRemoveEventListener(BOOMR.window)
                        }
                        if (BOOMR.window.Node) {
                            f.wrapFn("addEventListener", BOOMR.window.Node.prototype, !0, 1, s.VIA_EVENTHANDLER);
                            f.wrapRemoveEventListener(BOOMR.window.Node.prototype)
                        }
                        if (BOOMR.window.XMLHttpRequest) {
                            f.wrapFn("addEventListener", BOOMR.window.XMLHttpRequest.prototype, !0, 1, s.VIA_EVENTHANDLER);
                            f.wrapRemoveEventListener(BOOMR.window.XMLHttpRequest.prototype)
                        }
                    }
                if (f.monitorTimeout) {
                    f.wrapFn("setTimeout", BOOMR.window, !1, 0, s.VIA_TIMEOUT);
                    f.wrapFn("setInterval", BOOMR.window, !1, 0, s.VIA_TIMEOUT)
                }
                if (f.monitorReporting && BOOMR.window.ReportingObserver) {
                    f.reportingObserver = new BOOMR.window.ReportingObserver(function(e, t) {
                        if (BOOMR.utils.isArray(e))
                            for (i = 0; i < e.length; i++) {
                                n = e[i];
                                (r = n && n.body && (n.body.message || n.body.reason)) && f.send({
                                    message: r,
                                    fileName: n.body.sourceFile || n.url,
                                    lineNumber: n.body.lineNumber,
                                    columnNumber: n.body.columnNumber,
                                    noStack: !0
                                }, s.VIA_REPORTING_API)
                            }
                    }
                    ,{
                        buffered: !0
                    });
                    f.reportingObserver.observe()
                }
                return this
            },
            is_complete: function() {
                return !0
            },
            is_supported: function() {
                return f.initialized
            },
            SOURCE_APP: 1,
            SOURCE_BOOMERANG: 2,
            VIA_APP: 1,
            VIA_GLOBAL_EXCEPTION_HANDLER: 2,
            VIA_NETWORK: 3,
            VIA_CONSOLE: 4,
            VIA_EVENTHANDLER: 5,
            VIA_TIMEOUT: 6,
            VIA_REJECTION: 7,
            VIA_REPORTING_API: 8,
            EVENT_CLICK: 1,
            EVENT_NETWORK: 2,
            EVENT_LOG: 3,
            send: f.send,
            wrap: f.wrap,
            test: f.test,
            BoomerangError: h
        }
    }
    function h(e) {
        "number" == typeof (e = e || {}).count || "string" == typeof e.count ? this.count = parseInt(e.count, 10) : this.count = 1;
        "number" == typeof e.timestamp ? this.timestamp = e.timestamp : this.timestamp = BOOMR.now();
        "number" != typeof e.code && "string" != typeof e.code || (this.code = parseInt(e.code, 10));
        "string" == typeof e.message && (this.message = e.message);
        "string" == typeof e.functionName && (this.functionName = e.functionName);
        "string" == typeof e.fileName && (this.fileName = e.fileName);
        "number" != typeof e.lineNumber && "string" != typeof e.lineNumber || (this.lineNumber = parseInt(e.lineNumber, 10));
        "number" != typeof e.columnNumber && "string" != typeof e.columnNumber || (this.columnNumber = parseInt(e.columnNumber, 10));
        "string" == typeof e.stack && (this.stack = e.stack);
        "string" == typeof e.type && (this.type = e.type);
        "undefined" != typeof e.extra && (this.extra = e.extra);
        this.source = "number" == typeof e.source || "string" == typeof e.source ? parseInt(e.source, 10) : BOOMR.plugins.Errors.SOURCE_APP;
        "number" != typeof e.via && "string" != typeof e.via || (this.via = parseInt(e.via, 10));
        BOOMR.utils.isArray(e.frames) ? this.frames = e.frames : this.frames = [];
        BOOMR.utils.isArray(e.events) ? this.events = e.events : this.events = []
    }
}();
!function() {
    if (!BOOMR.plugins.TPAnalytics) {
        var c = {
            complete: !1,
            clientids: !1,
            dropParams: [],
            googleAnalytics: function() {
                var e, t, n, r, i, o = {}, a = BOOMR.window, s = ["utm_source", "utm_medium", "utm_term", "utm_content", "utm_campaign"];
                if (c.clientids) {
                    if ("function" == typeof a.ga)
                        try {
                            a.ga(function(e) {
                                e && (o.clientid = e.get("clientId"))
                            });
                            o.clientid || "function" != typeof a.ga.getAll || (i = a.ga.getAll()) && 0 < i.length && (o.clientid = i[0].get("clientId"))
                        } catch (u) {
                            d("googleAnalytics: " + u)
                        }
                    o.clientid || ((r = BOOMR.utils.getCookie("_ga")) ? (r = r.split(".")) && 4 === r.length && (o.clientid = r[2] + "." + r[3]) : (r = (r = BOOMR.utils.getCookie("__utma")) && r.split(".")) && 6 === r.length && (o.clientid = r[1] + "." + r[2]))
                }
                for (e = 0; e < s.length; e++) {
                    t = s[e];
                    (n = BOOMR.utils.getQueryParamValue(t)) && (o[t] = n)
                }
                return o
            },
            adobeAnalytics: function() {
                var e, t, n, r, i, o = {}, a = BOOMR.window;
                if ("undefined" != typeof a._satellite || "function" == typeof a.mboxCreate || "function" == typeof a.Visitor || "object" == typeof a.s) {
                    if (c.clientids)
                        if ("object" == typeof a.s && "object" == typeof a.s.visitor && "function" == typeof a.s.visitor.getAnalyticsVisitorID && "function" == typeof a.s.visitor.getMarketingCloudVisitorID)
                            try {
                                (t = a.s.visitor.getMarketingCloudVisitorID()) && (o.mid = t);
                                (e = a.s.visitor.getAnalyticsVisitorID()) && (o.aid = a.s.visitor.getAnalyticsVisitorID())
                            } catch (s) {
                                d("adobeAnalytics: " + s)
                            }
                        else if ((n = /AMCV_([A-Z0-9]+)%40AdobeOrg/.exec(a.document.cookie)) && "function" == typeof a.Visitor && "function" == typeof a.Visitor.getInstance)
                            try {
                                if ((r = a.Visitor.getInstance(n[1] + "@AdobeOrg")) && "function" == typeof r.getAnalyticsVisitorID && "function" == typeof r.getMarketingCloudVisitorID) {
                                    (t = r.getMarketingCloudVisitorID()) && (o.mid = t);
                                    (e = r.getAnalyticsVisitorID()) && (o.aid = r.getAnalyticsVisitorID())
                                }
                            } catch (s) {
                                d("adobeAnalytics: " + s)
                            }
                        else
                            (e = (e = BOOMR.utils.getCookie("s_vi")) ? (i = /\|([^\[]+)/.exec(e)) && 0 < i.length ? i[1] : "" : BOOMR.utils.getCookie("s_fid")) && (o.aid = e);
                    if ("object" == typeof a.s) {
                        "string" == typeof a.s.campaign && a.s.campaign && (o.campaign = a.s.campaign);
                        "string" == typeof a.s.purchaseID && a.s.purchaseID && (o.purchaseid = a.s.purchaseID)
                    }
                }
                return o
            },
            ibmAnalytics: function() {
                var e, t, n, r, i, o, a = {}, s = BOOMR.window, u = {
                    cm_mmc: [/([^&#]+?)-_-([^&#]+?)-_-([^&#]+?)-_-([^&#]+)/, ["mmc_vendor", "mmc_category", "mmc_placement", "mmc_item"]],
                    cm_sp: [/([^&#]+?)-_-([^&#]+?)-_-([^&#]+)/, ["sp_type", "sp_promotion", "sp_link"]],
                    cm_re: [/([^&#]+?)-_-([^&#]+?)-_-([^&#]+)/, ["re_version", "re_pagearea", "re_link"]]
                };
                if (c.clientids && "function" == typeof s.cmRetrieveUserID)
                    try {
                        s.cmRetrieveUserID(function(e) {
                            a.coreid = e
                        })
                    } catch (l) {
                        d("ibmAnalytics: " + l)
                    }
                for (r in u)
                    if (u.hasOwnProperty(r) && (e = BOOMR.utils.getQueryParamValue(r))) {
                        i = u[r][0];
                        o = u[r][1];
                        if ((t = i.exec(e)) && t.length > o.length)
                            for (n = 0; n < o.length; n++)
                                t[n + 1] && (a[o[n]] = decodeURIComponent(t[n + 1]))
                    }
                return a
            },
            done: function(e, t) {
                var n, r, i = {
                    ga: this.googleAnalytics,
                    aa: this.adobeAnalytics,
                    ia: this.ibmAnalytics
                };
                if (!this.complete && ("load" === t || e && "spa_hard" === e.initiator)) {
                    for (n in i) {
                        r = i[n]();
                        for (var o in r) {
                            var a = "tp." + n + "." + o;
                            BOOMR.utils.inArray(a, this.dropParams) || BOOMR.addVar(a, r[o], !0)
                        }
                    }
                    this.complete = !0;
                    BOOMR.sendBeacon()
                }
            },
            prerenderToVisible: function() {
                this.complete = !1;
                this.done({}, "load")
            }
        };
        BOOMR.plugins.TPAnalytics = {
            init: function(e) {
                BOOMR.utils.pluginConfig(c, e, "TPAnalytics", ["clientids", "dropParams"]);
                if (!c.initialized) {
                    BOOMR.utils.isArray(c.dropParams) || (c.dropParams = []);
                    BOOMR.subscribe("page_ready", c.done, "load", c);
                    BOOMR.subscribe("xhr_load", c.done, "xhr", c);
                    BOOMR.subscribe("prerender_to_visible", c.prerenderToVisible, "load", c);
                    c.initialized = !0
                }
                return this
            },
            is_complete: function() {
                return !0
            }
        }
    }
    function d(e) {
        BOOMR.warn(e, "TPAnalytics")
    }
}();
!function(r) {
    "use strict";
    var e, t;
    void 0 !== r ? t = (e = r).UserTimingCompression : e = {};
    var f, n = f = {};
    n.noConflict = function() {
        e.UserTimingCompression = t;
        return n
    }
    ;
    n.trimTiming = function(e, t) {
        "number" != typeof e && (e = 0);
        "number" != typeof t && (t = 0);
        var n = Math.round(e)
          , r = Math.round(t);
        return 0 === n ? 0 : n - r
    }
    ;
    n.toBase36 = function(e) {
        return "number" == typeof e ? e.toString(36) : ""
    }
    ;
    n.findUserTimingForFrame = function(e) {
        var t;
        if (!e)
            return [];
        try {
            e.location && e.location.href;
            if (!("performance"in e && e.performance && e.performance.getEntriesByType))
                return t;
            t = (t = e.performance.getEntriesByType("mark")).concat(e.performance.getEntriesByType("measure"))
        } catch (n) {
            return t
        }
        return t
    }
    ;
    n.compressUserTiming = function(e, t) {
        var n, r, i = 0, o = {};
        t = t || {};
        if (!e || !e.length)
            return [];
        for (n = 0; n < e.length; n++) {
            "undefined" == typeof o[(r = e[n]).name] && (o[r.name] = []);
            "mark" === r.entryType ? o[r.name].push({
                startTime: r.startTime
            }) : "measure" === r.entryType && o[r.name].push({
                startTime: r.startTime,
                duration: r.duration
            })
        }
        for (var a in o)
            if (o.hasOwnProperty(a)) {
                if (t.map && "undefined" == typeof t.map[a])
                    continue;
                var s = o[a];
                if (t.map && "undefined" != typeof t.map[a]) {
                    delete o[a];
                    a = t.map[a]
                }
                for (n = i = 0; n < s.length; n++) {
                    var u, l = s[n];
                    "0" === (u = f.toBase36(f.trimTiming(l.startTime, i))) && (u = "");
                    var c = u;
                    if ("number" == typeof l.duration) {
                        var d = f.toBase36(Math.round(l.duration));
                        c += "_";
                        "0" !== d && (c += d)
                    }
                    i = l.startTime;
                    s[n] = c
                }
                o[a] = f.compressArray(s)
            }
        return o
    }
    ;
    n.convertToTrie = function(e) {
        var t, n, r, i, o, a, s, u = {};
        if (!e)
            return {};
        for (t in e)
            if (e.hasOwnProperty(t)) {
                r = e[t];
                i = t.split("");
                a = u;
                for (n = 0; n < i.length; n++)
                    void 0 === (s = a[o = i[n]]) ? a = a[o] = n === i.length - 1 ? r : {} : "string" == typeof s || "number" == typeof s ? a = a[o] = {
                        "!": s
                    } : n === i.length - 1 ? a[o]["!"] = r : a = a[o]
            }
        return u
    }
    ;
    n.optimizeTrie = function(e, t) {
        var n, r, i, o = 0;
        if (!e)
            return {};
        for (n in e) {
            if ("object" == typeof e[n] && (r = this.optimizeTrie(e[n], !1))) {
                delete e[n];
                e[n += r.name] = r.value
            }
            o++
        }
        if (1 !== o)
            return !!t && e;
        if (t) {
            (i = {})[n] = e[n];
            return i
        }
        return {
            name: n,
            value: e[n]
        }
    }
    ;
    n.compressArray = function(e) {
        var t = 0
          , n = "";
        if (!e || 0 === e.length || e.constructor !== Array)
            return "";
        for (var r = 0; r < e.length; r++) {
            var i = e[r];
            if (r < e.length - 1 && i === e[r + 1])
                t++;
            else if (0 < t) {
                n += ("" !== n ? "." : "") + i + "*";
                2 <= t && (n += t + 1);
                t = 0
            } else
                n += ("" !== n ? "." : "") + i
        }
        return /^\d+$/.test(n) ? parseInt(n, 10) : n
    }
    ;
    n.getCompressedUserTiming = function(t) {
        var e = (t = t || {}).window || r
          , n = this.findUserTimingForFrame(e);
        t.from && (n = n.filter(function(e) {
            return e.startTime + e.duration >= t.from
        }));
        t.to && (n = n.filter(function(e) {
            return e.startTime <= t.to
        }));
        return f.compressUserTiming(n, t)
    }
    ;
    n.compressForUri = function(e) {
        if ("object" != typeof e)
            return "";
        var t = !1;
        for (var n in e)
            if (e.hasOwnProperty(n)) {
                if (isNaN(n)) {
                    t = !1;
                    break
                }
                t = !0
            }
        if (t)
            return "1" + f.flattenMap(e);
        var r = f.convertToTrie(e)
          , i = f.optimizeTrie(r, !0)
          , o = f.jsUrl(i)
          , a = f.flattenArray(e);
        if ("string" != typeof a || 0 === a.length)
            return "";
        var s = encodeURIComponent(o)
          , u = encodeURIComponent(a);
        return s.length < u.length ? o : "0" + a
    }
    ;
    n.flattenArray = function(e) {
        var t = [];
        if ("object" != typeof e)
            return "";
        for (var n in e)
            if (e.hasOwnProperty(n)) {
                var r = (e[n] + "").replace("~", "%7E")
                  , n = n.replace("~", "%7E");
                t.push(n + "~" + r)
            }
        return t = t.join("~")
    }
    ;
    n.flattenMap = function(e) {
        var t = [];
        if ("object" != typeof e)
            return "";
        for (var n in e)
            if (e.hasOwnProperty(n)) {
                var r = parseInt(n, 10)
                  , i = f.toBase36(r);
                if (1331 < r)
                    continue;
                1 < i.length && (i = "-" + (1 === (i = f.toBase36(r - 36)).length ? "0" : "") + i);
                t.push(i + e[n])
            }
        t.sort();
        return t = t.join("~")
    }
    ;
    n.jsUrl = function(n) {
        function r(e) {
            return /[^\w-.]/.test(e) ? e = e.replace(/[^\w-.]/g, function(e) {
                return "$" === e ? "!" : (e = e.charCodeAt(0)) < 256 ? "*" + ("00" + e.toString(16)).slice(-2) : "**" + ("0000" + e.toString(16)).slice(-4)
            }) : e
        }
        switch (typeof n) {
        case "number":
            return isFinite(n) ? "~" + n : "~null";
        case "string":
            return "~'" + r(n);
        case "boolean":
            return "~" + n;
        case "object":
            return n ? Array.isArray(n) ? "~(" + (n.map(function(e) {
                return f.jsUrl(e) || "~null"
            }).join("") || "~") + ")" : "~(" + Object.keys(n).map(function(e) {
                var t = f.jsUrl(n[e]);
                return t && r(e) + t
            }).filter(function(e) {
                return e
            }).sort().join("~") + ")" : "~null";
        default:
            return undefined
        }
    }
    ;
    void 0 !== e && (e.UserTimingCompression = n)
}("undefined" != typeof window ? window : undefined);
!function() {
    if (!BOOMR.plugins.UserTiming) {
        var s = {
            complete: !1,
            initialized: !1,
            supported: !1,
            options: {
                from: 0,
                window: BOOMR.window
            },
            getUserTiming: function() {
                var e = this.findUserTimingForFrame(s.options.window);
                s.options.from && (e = e.filter(function(e) {
                    return e.startTime + e.duration >= s.options.from
                }));
                var t = window.UserTimingCompression || BOOMR.window.UserTimingCompression;
                if (void 0 === t) {
                    if (0 === e.length)
                        return null;
                    for (var n = {}, r = 0, i = e.length; r < i; r++) {
                        var o = e[r];
                        n[o.entryType] = n[o.entryType] || {};
                        "mark" === o.entryType ? n[o.entryType][o.name] = o.startTime : "measure" === o.entryType && (n[o.entryType][o.name] = o.duration)
                    }
                    return JSON.stringify(n)
                }
                var a = t.compressUserTiming(e);
                return t.compressForUri(a)
            },
            addEntriesToBeacon: function(e) {
                var t, n = BOOMR.hrNow();
                if (!(this.complete || e && "undefined" != typeof e.early)) {
                    (t = this.getUserTiming()) && BOOMR.addVar("usertiming", t, !0);
                    this.options.from = n;
                    this.complete = !0
                }
            },
            findUserTimingForFrame: function(e) {
                var t;
                if (!e)
                    return [];
                try {
                    e.location && e.location.href;
                    if (!("performance"in e && e.performance && e.performance.getEntriesByType))
                        return t;
                    t = (t = e.performance.getEntriesByType("mark")).concat(e.performance.getEntriesByType("measure"))
                } catch (n) {
                    return t
                }
                return t
            },
            clearMetrics: function(e) {
                this.complete = !1
            },
            subscribe: function() {
                BOOMR.subscribe("before_beacon", this.addEntriesToBeacon, null, this);
                BOOMR.subscribe("beacon", this.clearMetrics, null, this)
            },
            pageReady: function() {
                this.checkSupport() && this.subscribe()
            },
            checkSupport: function() {
                if (this.supported)
                    return !0;
                var e = BOOMR.getPerformance();
                if (e && "function" == typeof e.getEntriesByType) {
                    var t = e.getEntriesByType("mark")
                      , n = e.getEntriesByType("measure");
                    if (BOOMR.utils.isArray(t) && BOOMR.utils.isArray(n)) {
                        BOOMR.info("Client supports UserTiming API", "usertiming");
                        return this.supported = !0
                    }
                }
                return !1
            }
        };
        BOOMR.plugins.UserTiming = {
            init: function(e) {
                if (s.initialized)
                    return this;
                s.checkSupport() ? s.subscribe() : BOOMR.subscribe("page_ready", s.pageReady, null, s);
                s.initialized = !0;
                return this
            },
            is_complete: function() {
                return !0
            },
            is_supported: function() {
                return s.initialized && s.supported
            }
        }
    }
}();
!function() {
    function r(e, t, n) {
        var r = e.shift();
        if ("string" == typeof r) {
            var i = r.split(".")
              , o = BOOMR
              , a = BOOMR;
            "BOOMR" === i[0] && i.shift();
            for (; i.length && o && ("object" == typeof o || "function" == typeof o); ) {
                var s = i.shift()
                  , o = o[s];
                i.length && (a = a[s])
            }
            if (!i.length && "function" == typeof o) {
                var u = o.apply(a, e);
                "function" == typeof t && t.call(n, u)
            }
        }
    }
    function e(e) {
        for (var t = 0; t < e.length; t++) {
            var n = e[t];
            n && (BOOMR.utils.isArray(n) ? r(n) : "object" == typeof n && BOOMR.utils.isArray(n.arguments) && r(n.arguments, n.callback, n.thisArg))
        }
    }
    var t = BOOMR.window.BOOMR_mq;
    BOOMR.utils.isArray(t) && e(t);
    BOOMR.window.BOOMR_mq = {
        push: function() {
            e(arguments)
        }
    }
}();
!function() {
    if (!BOOMR.plugins.Akamai) {
        var s = {
            initialized: !1,
            dns_prefetch_enabled: undefined,
            mapping_xhr_base_url: undefined,
            mapping_xhr_url_path: undefined,
            mapping_xhr_url_v4_prefix: undefined,
            mapping_xhr_url_v6_prefix: undefined,
            xhrRetryMarker: "akamaiXhrRetry",
            regEx: undefined,
            complete: !1,
            done: function(e, t) {
                if (!this.complete) {
                    if (s.dns_prefetch_enabled && BOOMR.plugins.AK && BOOMR.plugins.AK.akDNSPreFetchDomain) {
                        var n = document.createElement("link");
                        n.setAttribute("id", "dnsprefetchlink");
                        n.setAttribute("rel", "dns-prefetch");
                        n.setAttribute("href", "//" + BOOMR.plugins.AK.akDNSPreFetchDomain);
                        document.getElementsByTagName("head")[0].appendChild(n)
                    }
                    if (window.XMLHttpRequest && !BOOMR.utils.getLocalStorage(s.xhrRetryMarker) && s.mapping_xhr_base_url && s.mapping_xhr_url_path && (s.mapping_xhr_url_v4_prefix || s.mapping_xhr_url_v6_prefix)) {
                        if (s.mapping_xhr_url_v4_prefix) {
                            var r = "https://" + s.mapping_xhr_url_v4_prefix + "." + s.mapping_xhr_base_url + s.mapping_xhr_url_path + "?c=p" + BOOMR.pageId
                              , i = new XMLHttpRequest;
                            i.open("GET", r, !0);
                            setTimeout(function() {
                                i.send()
                            }, 200)
                        }
                        if (s.mapping_xhr_url_v6_prefix) {
                            var o = "https://" + s.mapping_xhr_url_v6_prefix + "." + s.mapping_xhr_base_url + s.mapping_xhr_url_path + "?c=p" + BOOMR.pageId
                              , a = new XMLHttpRequest;
                            a.open("GET", o, !0);
                            setTimeout(function() {
                                a.send()
                            }, 200)
                        }
                        BOOMR.utils.setLocalStorage(s.xhrRetryMarker, {}, 1800)
                    } else
                        BOOMR.utils.getLocalStorage(s.xhrRetryMarker);
                    this.complete = !0
                }
            }
        };
        BOOMR.plugins.Akamai = {
            init: function(e) {
                BOOMR.utils.pluginConfig(s, e, "Akamai", ["dns_prefetch_enabled", "mapping_xhr_base_url", "mapping_xhr_url_path", "mapping_xhr_url_v4_prefix", "mapping_xhr_url_v6_prefix"]);
                if (!s.regEx && s.mapping_xhr_base_url && s.mapping_xhr_url_path && (s.mapping_xhr_url_v4_prefix || s.mapping_xhr_url_v6_prefix) && BOOMR.plugins.AutoXHR) {
                    var t = s.mapping_xhr_url_v4_prefix && s.mapping_xhr_url_v6_prefix ? "(" + s.mapping_xhr_url_v4_prefix + "|" + s.mapping_xhr_url_v6_prefix + ")" : s.mapping_xhr_url_v4_prefix || s.mapping_xhr_url_v6_prefix;
                    try {
                        s.regEx = new RegExp("^https://" + t + "." + s.mapping_xhr_base_url + s.mapping_xhr_url_path);
                        s.regEx && BOOMR.plugins.AutoXHR.addExcludeFilter(function(e) {
                            return s.regEx.test(e.href)
                        }, s, "BOOMR.plugins.Akamai.exlude.mapping.endpoint")
                    } catch (n) {}
                }
                if (s.initialized)
                    return this;
                BOOMR.subscribe("page_ready", s.done, "load", s);
                BOOMR.subscribe("xhr_load", s.done, "xhr", s);
                s.initialized = !0;
                return this
            },
            is_complete: function() {
                return !0
            }
        }
    }
}();
!function() {
    if (!BOOMR.plugins.Early) {
        var n = {
            initialized: !1,
            autorun: !0,
            earlyBeaconSent: !1,
            singlePageApp: !1,
            onConfigFired: !1,
            onSpaInit: function() {
                this.earlyBeaconSent = !1
            },
            clearMetrics: function() {
                BOOMR.removeVar("early")
            },
            sendEarlyBeacon: function(e, t) {
                var n = 0
                  , r = BOOMR.getPerformance()
                  , i = BOOMR.window && BOOMR.window.document;
                if (i) {
                    "onconfig" === t && (this.onConfigFired = !0);
                    r && r.navigation && (n = r.navigation.type);
                    if (!(this.earlyBeaconSent || "prerender" === BOOMR.visibilityState() || 1 === n || 2 === n || !this.singlePageApp && (!this.autorun || !this.onConfigFired && "prerender_to_visible" === t || "loading" === i.readyState || BOOMR.hasBrowserOnloadFired()) || this.singlePageApp && !BOOMR.utils.inArray(t, BOOMR.constants.BEACON_TYPE_SPAS))) {
                        this.earlyBeaconSent = !0;
                        BOOMR.addVar("early", "1");
                        if (e && BOOMR.utils.inArray(e.initiator, BOOMR.constants.BEACON_TYPE_SPAS)) {
                            BOOMR.addVar("http.initiator", e.initiator);
                            BOOMR.addVar("rt.start", "manual")
                        }
                        BOOMR.fireEvent("before_early_beacon", e);
                        BOOMR.sendBeacon()
                    }
                }
            }
        };
        BOOMR.plugins.Early = {
            init: function(e) {
                if (e.primary || n.initialized)
                    return this;
                "undefined" != typeof e.autorun && (n.autorun = e.autorun);
                n.singlePageApp = BOOMR.plugins.SPA && BOOMR.plugins.SPA.isSinglePageApp(e);
                BOOMR.registerEvent("before_early_beacon");
                BOOMR.subscribe("config", n.sendEarlyBeacon, "onconfig", n, !0);
                BOOMR.subscribe("dom_loaded", n.sendEarlyBeacon, "dom_loaded", n, !0);
                BOOMR.subscribe("spa_init", n.onSpaInit, null, n);
                BOOMR.subscribe("prerender_to_visible", n.sendEarlyBeacon, "prerender_to_visible", n, !0);
                BOOMR.subscribe("beacon", n.clearMetrics, null, n);
                BOOMR.subscribe("before_beacon", function(e) {
                    "undefined" != typeof e["rt.quit"] && n.clearMetrics()
                }, null, n);
                n.initialized = !0;
                return this
            },
            is_complete: function() {
                return !0
            },
            is_supported: function() {
                return n.initialized
            },
            sendEarlyBeacon: function(e, t) {
                n.sendEarlyBeacon(e, t)
            }
        }
    }
}();
!function() {
    if (!BOOMR.plugins.EventTiming) {
        var n = {
            click: 0,
            dblclick: 1,
            mousedown: 2,
            mouseup: 3,
            mousemove: 4,
            touchstart: 5,
            touchend: 6,
            touchmove: 7,
            keydown: 8,
            keyup: 9,
            keypress: 10,
            wheel: 11,
            pointerdown: 12,
            pointerup: 13,
            pointermove: 14,
            compositionstart: 17,
            compositionupdate: 18,
            compositionend: 19,
            contextmenu: 20
        }
          , r = {
            initialized: !1,
            supported: null,
            observerEvent: null,
            observerFirstInput: null,
            entries: [],
            firstInputDelay: null,
            timeToFirstInteraction: null,
            onBeforeBeacon: function() {
                if (r.entries && r.entries.length) {
                    for (var e = [], t = 0; t < r.entries.length; t++)
                        e.push({
                            n: n[r.entries[t].name] ? n[r.entries[t].name] : r.entries[t].name,
                            s: Math.round(r.entries[t].startTime).toString(36),
                            d: Math.round(r.entries[t].duration).toString(36),
                            p: Math.round(r.entries[t].processingEnd - r.entries[t].processingStart).toString(36),
                            c: r.entries[t].cancelable ? 1 : 0,
                            fi: "first-input" === r.entries[t].entryType ? 1 : undefined
                        });
                    BOOMR.addVar("et.e", BOOMR.utils.serializeForUrl(e), !0)
                }
                r.entries = [];
                if (null !== r.firstInputDelay) {
                    BOOMR.addVar("et.fid", Math.ceil(r.firstInputDelay), !0);
                    r.firstInputDelay = null
                }
            },
            onEventTiming: function(e) {
                r.entries = r.entries.concat(e.getEntries())
            },
            onFirstInput: function(e) {
                var t = e.getEntries();
                r.entries = r.entries.concat(t);
                r.firstInputDelay = t[0].processingStart - t[0].startTime;
                r.timeToFirstInteraction = t[0].startTime
            }
        };
        BOOMR.plugins.EventTiming = {
            init: function() {
                this.is_supported() || (r.initialized = !0);
                if (!r.initialized) {
                    BOOMR.subscribe("before_beacon", r.onBeforeBeacon, null, r);
                    try {
                        r.observerEvent = new PerformanceObserver(r.onEventTiming);
                        r.observerEvent.observe({
                            type: ["event"],
                            buffered: !0
                        });
                        r.observerFirstInput = new PerformanceObserver(r.onFirstInput);
                        r.observerFirstInput.observe({
                            type: ["first-input"],
                            buffered: !0
                        })
                    } catch (e) {
                        r.supported = !1
                    }
                    r.initialized = !0
                }
                return this
            },
            is_complete: function() {
                return !0
            },
            is_enabled: function() {
                return r.initialized && this.is_supported()
            },
            is_supported: function() {
                if (null !== r.supported)
                    return r.supported;
                var e = BOOMR.getPerformance();
                r.supported = e && "undefined" != typeof window.PerformanceEventTiming && "function" == typeof window.PerformanceObserver;
                r.supported && BOOMR.info("This user agent supports EventTiming", "et");
                return r.supported
            },
            stop: function() {
                if (r.observerEvent) {
                    r.observerEvent.disconnect();
                    r.observerEvent = null
                }
                if (r.observerFirstInput) {
                    r.observerFirstInput.disconnect();
                    r.observerFirstInput = null
                }
            },
            metrics: {
                count: function() {
                    return r.entries.length
                },
                averageDuration: function() {
                    if (0 === r.entries.length)
                        return 0;
                    for (var e = 0, t = 0; t < r.entries.length; t++)
                        e += r.entries[t].duration;
                    return e / r.entries.length
                },
                firstInputDelay: function() {
                    return r.firstInputDelay
                },
                timeToFirstInteraction: function() {
                    return r.timeToFirstInteraction
                }
            }
        }
    }
}();
!function(s) {
    var u, l = document, c = s.location.hostname, d = !1, n = !1, r = !0, i = !1, e = s.BOOMR_LOGN_always, f = s.BOOMR_CONFIG_RELOAD_TIMEOUT || 33e4, a = s.BOOMR_CONFIG_STORE_TIMEOUT || 480, o = !1;
    if (!BOOMR.plugins.LOGN && !1 !== e && (void 0 !== e || c && "localhost" !== c && !c.match(/\.\d+$/) && !c.match(/^mhtml/) && !c.match(/^file:\//))) {
        var p = {
            storeConfig: !1
        };
        BOOMR.plugins.LOGN = {
            init: function(e) {
                var t;
                BOOMR.utils.pluginConfig(p, e, "LOGN", ["storeConfig"]);
                if (d || BOOMR.session.rate_limited)
                    return this;
                if (e) {
                    if (e.rate_limited) {
                        BOOMR.session.rate_limited = !0;
                        return this
                    }
                    "undefined" != typeof e.autorun && (r = e.autorun)
                }
                if (n) {
                    BOOMR.fireEvent("config", e);
                    o = !0;
                    BOOMR.setImmediate(O);
                    if (u) {
                        BOOMR.addVar("t_configjs", BOOMR.now() - u);
                        if ("number" == typeof BOOMR_configt) {
                            BOOMR.addVar("t_configfb", BOOMR_configt - u);
                            delete BOOMR_configt
                        }
                    }
                    return this
                }
                s && s.BOOMR_API_key ? t = s.BOOMR_API_key : l && BOOMR.url && -1 !== BOOMR.url.lastIndexOf("/") && (t = BOOMR.url.substr(BOOMR.url.lastIndexOf("/") + 1));
                if (t) {
                    BOOMR.addVar("h.key", t);
                    if (!i && BOOMR.plugins && BOOMR.plugins.AutoXHR && "function" == typeof BOOMR.plugins.AutoXHR.addExcludeFilter) {
                        BOOMR.plugins.AutoXHR.addExcludeFilter(function(e) {
                            return !!(e && e.href && -1 < e.href.indexOf(this))
                        }, t, "ConfigXHRRequestFilter");
                        i = !0
                    }
                    BOOMR.setVarPriority("h.d", -1);
                    BOOMR.setVarPriority("h.key", -1);
                    BOOMR.setVarPriority("h.t", -1);
                    BOOMR.setVarPriority("h.cr", 1);
                    BOOMR.subscribe("beacon", R, null, null);
                    n = !0;
                    BOOMR.setImmediate(g);
                    return this
                }
                BOOMR.error("API key could not be detected from script URL or BOOMR_API_key, exiting")
            },
            is_complete: function() {
                return o
            },
            readyToSend: function() {
                return BOOMR.hasVar("h.cr")
            },
            isJson: !0
        }
    }
    function O() {
        if (!d) {
            n = !(d = !0);
            (r || BOOMR.onloadFired() && "prerender" !== BOOMR.visibilityState()) && BOOMR.sendBeacon()
        }
    }
    function m(e) {
        if (e.session_id) {
            BOOMR.session.ID = e.session_id;
            delete e.session_id
        }
        for (var t = ["h.key", "h.d", "h.t", "h.cr"], n = 0; n < t.length; n++)
            if (e[t[n]]) {
                BOOMR.addVar(t[n], e[t[n]]);
                delete e[t[n]]
            }
        BOOMR.init(e);
        return !0
    }
    function h(e, t) {
        s.BOOMR_configt = BOOMR.now();
        var n, r = function o(e) {
            var t = function() {
                throw new Exception("No JSON.parse available")
            };
            window.JSON && "function" == typeof JSON.parse ? t = JSON.parse : BOOMR.window && (BOOMR.window.JSON && "function" == typeof BOOMR.window.JSON.parse ? t = BOOMR.window.JSON.parse : "function" == typeof BOOMR.window.json_parse && (t = BOOMR.window.json_parse));
            try {
                return t(e)
            } catch (n) {}
            return null
        }(e);
        if (r) {
            n = t && BOOMR.utils.getLocalStorage("LOGN") || {};
            for (var i in r)
                r.hasOwnProperty(i) && (n[i] = r[i]);
            (p.storeConfig || r.LOGN && r.LOGN.storeConfig) && BOOMR.utils.setLocalStorage("LOGN", n, a);
            t || setTimeout(g, f);
            return m(r)
        }
    }
    function g() {
        var e, r, t, n = l.createElement("A"), i = BOOMR.getBeaconURL ? BOOMR.getBeaconURL() : "", o = [];
        if (!d && (t = BOOMR.utils.getLocalStorage("LOGN")) && m(t)) {
            BOOMR.addVar("t_configls", Math.round(BOOMR.hrNow()));
            BOOMR.setImmediate(O)
        }
        for (e in BOOMR.plugins)
            BOOMR.plugins.hasOwnProperty(e) && o.push(encodeURIComponent(e));
        u = BOOMR.now();
        r = "https://c.go-mpulse.net/api/config.json";
        r += "?key=" + BOOMR.getVar("h.key") + "&d=" + encodeURIComponent(c) + "&t=" + Math.round(u / 3e5) + "&v=" + BOOMR.version + (s === window ? "" : "&if=") + "&sl=" + (0 < BOOMR.session.length ? 1 : 0) + "&si=" + BOOMR.session.ID + "-" + Math.round(BOOMR.session.start / 1e3).toString(36) + (d ? "&r=" : "") + (i ? "&bcn=" + encodeURIComponent(i) : "") + (d ? "" : "&plugins=" + o.join(","));
        r += "&acao=";
        if (BOOMR.plugins.AK && BOOMR.plugins.AK.akVars) {
            var a = BOOMR.plugins.AK.akVars["ak.ai"];
            isNaN(a) || !BOOMR.utils.isInteger(a) && isNaN(parseInt(a, 10)) || (r += "&ak.ai=" + a)
        }
        n.href = r;
        BOOMR.config_url = n.href;
        !function(e) {
            if (window.XDomainRequest) {
                0 === r.indexOf("https:") && "http:" === window.location.protocol && (r = r.replace("https://", "http://"));
                var t = new XDomainRequest;
                t.open("GET", r);
                t.onload = function() {
                    h(t.responseText, e)
                }
                ;
                t.send()
            } else {
                var n = new XMLHttpRequest;
                n.open("GET", r, !0);
                n.onreadystatechange = function() {
                    4 === n.readyState && 200 === n.status && h(n.responseText, e)
                }
                ;
                n.send(null)
            }
        }(d);
        d && setTimeout(function() {
            g()
        }, f)
    }
    function R(e) {
        if (!e || !("undefined" != typeof e.early || e["http.initiator"] && 0 === e["http.initiator"].indexOf("api_custom_"))) {
            BOOMR.removeVar("t_configjs");
            BOOMR.removeVar("t_configfb");
            BOOMR.removeVar("t_configls")
        }
    }
}(BOOMR.window);
BOOMR.init({
    primary: !0,
    log: null,
    wait: !0,
    site_domain: null,
    ResourceTiming: {
        enabled: !1,
        splitAtPath: !0
    },
    Angular: {
        enabled: !1
    },
    Ember: {
        enabled: !1
    },
    Backbone: {
        enabled: !1
    },
    History: {
        enabled: !1
    },
    Errors: {
        enabled: !1
    },
    TPAnalytics: {
        enabled: !1
    },
    UserTiming: {
        enabled: !1
    },
    Continuity: {
        enabled: !1
    },
    IFrameDelay: {
        enabled: !1
    },
    Akamai: {
        enabled: !0
    },
    Early: {
        enabled: !1
    },
    EventTiming: {
        enabled: !0
    }
});
location = {
    protocol: "https"
}
BOOMR.testedCookies = true
BOOMR.session.domain = 'www.dhl.com'
BOOMR.session.ID = 'aa1d7917-4008-4399-92a8-9d68312677cf'
BOOMR.t_end = (new Date).getTime();
ma = mmmmain(window)
// console.log(ma)
console.log(ma.onsubmit({nodeName: "FORM"}));

// console.log("BOOMR.session.start", BOOMR.session.start)
//
// iiii = BOOMR.utils.hashString("demo-track-and-trace-utapi.shtml?")
